如何在PHP中正确地URL编码一个字符串?
我正在创建一个搜索页面,在其中键入搜索查询并将表单提交给search.php?query=your query
。 什么PHP功能是最好的,我应该用于编码/解码搜索查询?
对于URI查询使用urlencode
/ urldecode
; 为其他任何使用rawurlencode
/ rawurldecode
。
urlencode
和rawurlencode
之间的区别在于
urlencode
根据application / x-www-form-urlencoded进行编码(空间用+
编码) rawurlencode
根据纯百分比编码(空间编码为%20
)进行编码。 狡猾的urlencode()和urldecode()。
但是,您不需要对出现在$_POST
和$_GET
变量使用urldecode()
。
这是我的用例,它需要特殊数量的编码。 也许你认为它是人为的,但我们在生产中运行这个。 巧合的是,这涵盖了所有类型的编码,因此我将其作为教程进行发布。
用例描述
有人刚刚在我们的网站上购买了预付礼品卡(“代币”)。 令牌具有相应的URL来兑换它们。 该客户想要将其发送给其他人。 我们的网页包含一个mailto
链接,可以让他们做到这一点。
PHP代码
// The order system generates some opaque token
$token = 'w%a&!e#"^2(^@azW';
// Here is a URL to redeem that token
$redeemUrl = 'https://httpbin.org/get?token=' . urlencode($token);
// Actual contents we want for the email
$subject = 'I just bought this for you';
$body = 'I just bought a widget for you. Please enter your shipping details here: ' . $redeemUrl;
// A URI for the email as prescribed
$mailToUri = 'mailto:?subject=' . rawurlencode($subject) . '&body=' . rawurlencode($body);
// Print an HTML element that links to that page
echo '<a href="' . htmlspecialchars($mailToUri) . '">Email your friend</a>';
注意:以上假设您正在输出到text/html
文档。 如果你的输出媒体类型是text/json
那么只需使用$retval['url'] = $mailToUri;
因为输出编码由json_encode()
处理。
测试用例
你应该看到:
"args": {
"token": "w%a&!e#"^2(^@azW"
},
当然这是上面的$token
的JSON表示。
上一篇: How to properly URL encode a string in PHP?
下一篇: Count characters after given symbol in oracle varchar column value