2011-01-20 326 views
61

我正在创建搜索页面,在其中键入搜索查询并将表单提交到search.php?query=your query。什么PHP功能是最好的,我应该用于编码/解码搜索查询?如何在PHP中正确地对URL进行编码?

+2

您是否遇到任何问题?浏览器和PHP应该自动处理它(例如,将'foo bar'放在文本字段中,在URL中创建'foo + bar')。 – 2011-01-20 08:33:52

+0

@Felix我打算使用`file_get_contents`调用搜索者脚本 – 2011-01-20 08:36:55

回答

14

狡猾地命名为urlencode()urldecode()

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

+3

巧妙命名的`rawurlencode`和`rawurldecode` ... – 2016-09-09 11:48:55

2

这是我的用例,它需要特殊量的编码。也许你认为它是人为的,但我们在生产中运行这个。巧合的是,这涵盖了所有类型的编码,因此我将其作为教程进行发布。

用例描述

有人只是在我们的网站购买了预付费礼品卡(“令牌”)。令牌具有相应的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()处理。

测试用例

  1. 上运行PHP的测试网站的代码(是有规范的一个,我应该在这里提到?
  2. 点击链接
  3. 发送电子邮件
  4. 获取电子邮件
  5. 点击该链接

你应该看到:

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

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

相关问题