关于urlencode:如何在PHP中正确地对字符串进行URL编码?

How to properly URL encode a string in PHP?

我正在创建一个搜索页面,您在其中键入一个搜索查询并将表单提交给search.php?query=your query。什么PHP函数是最好的,我应该用它来编码/解码搜索查询?


对于uri查询,使用urlencode/urldecode;对于其他任何查询,使用rawurlencode/rawurldecode

urlencoderawurlencode的区别在于

  • urlencode根据application/x-www-form-urlencoded编码(空格用+编码),而
  • rawurlencode按纯百分比编码(空格用%20编码)。


巧妙命名的urlencode()和urldecode()。

但是,您不需要对出现在$_POST$_GET中的变量使用urldecode()


这是我的用例,它需要大量的编码。也许你认为它是人为的,但我们是在生产上运行的。巧合的是,这涵盖了所有类型的编码,所以我将作为教程发布。

用例描述

有人刚在我们的网站上买了一张预付礼品卡("代币")。令牌有相应的URL来兑换它们。此客户希望通过电子邮件将其发送给其他人。我们的网页包含一个mailto链接,允许他们这样做。

PHP代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 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 'Email your friend';

注意:以上假设您正在输出到一个text/html文档。如果输出媒体类型为text/json,那么只需使用$retval['url'] = $mailToUri;,因为输出编码由json_encode()处理。

测试用例

  • 在一个PHP测试站点上运行代码(这里我应该提到一个规范的站点吗?)
  • 点击链接
  • 发送电子邮件
  • 收到电子邮件
  • 单击该链接
  • 你应该看到:

    1
    2
    3
    "args": {
     "token":"w%a&!e#"^2(^@azW"
    },

    当然,这是上述$token的JSON表示。


    可以使用url编码函数php具有

    功能

    ASP有

    1
    Server.URLEncode()

    功能

    在javascript中,您可以使用

    4

    功能。