如何在PHP中正确地URL编码一个字符串?

我正在创建一个搜索页面,在其中键入搜索查询并将表单提交给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代码

    // 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()处理。

    测试用例

  • 在PHP测试网站上运行代码(是否有一个规范的代码,我应该在这里提到?)
  • 点击链接
  • 发送电子邮件
  • 获取电子邮件
  • 点击该链接
  • 你应该看到:

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

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

    链接地址: http://www.djcxy.com/p/92765.html

    上一篇: How to properly URL encode a string in PHP?

    下一篇: Count characters after given symbol in oracle varchar column value