我使用变量将查询传递到我的搜索结果页面:?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/