php - 如何在 URL 中传递值内的 '&' 符号?

标签 php url encoding

我使用变量将查询传递到我的搜索结果页面:?s=

我正在测试该网站,我发现当查询中包含 & 符号时,当我尝试检索 $_GET['s'] 时,它会得到切入 & 符号。

我尝试使用 & 并将其转换为 %26 但我仍然遇到同样的问题。

如何对它们进行编码以在 URL 中传递它们?

编辑:

我指出,我尝试将其编码为 %26,但它仍然无效。

我尝试使用 urlencode()?s=pizza%26pasta 当我 print_r($_GET) 我得到:

Array ( [s] => pizza [pasta] => )

编辑 2:

我刚刚发现问题实际上与 .htaccess 有关,它似乎转换了 '&something=' 中的 '&something'。不知道如何在 htaccess 中修复它。

这是我的 .htaccess 文件:

RewriteEngine On
RewriteBase /

# remove www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L]

# rewrite to action
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([^/]+)/?$ /a/?s=$1 [L,QSA]

最佳答案

将 amersand (&) 编码为 %26 的 Url 是执行此操作的正确方法。

使用 http://yoursite.com?var1=this%26that&var2=other 将导致您的 $_GET 超全局数组有两个变量

$_GET['var1'] = 'this&that';
$_GET['var2'] = 'other';

您可以使用函数 urlencode自动编码所有需要编码的字符。这些通常是用于构成 url 组成部分的字符。即 At 符号 (@)、冒号 (:)、问号 (?) 等。

var_dump(urlencode('one&two'));

string(9) "one%26two"

关于php - 如何在 URL 中传递值内的 '&' 符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11771995/

相关文章:

c# - asp.net 中 ./, ../, ../../, ~/on file path(URL) 之间的区别

linux - 如何将文件从 ASCII 转换为 UTF-8?

xml - 使用 "FOR XML PATH"时如何避免字符编码?

php - MySQL 在另一行更改时更新一行

PHP - 如何访问深层数组的内容,动态构建它的路径

html - 如何为复选框值构建 url 参数

.htaccess - 2 域名 (EN/FR) 1 FTP 重定向

python - 如何使用 python 修复包含字符\u2014、\u2017 等的文本文件?

php - WordPress 自定义搜索按钮

php - Yii2 excel导入 'PHPExcel_IOFactory'未找到