我将查询传递到带有变量?s=
的搜索结果页面。
我在测试这个网站时发现,当查询中有一个&
符号时,当我试图检索$_GET['s']
时,它会在&象征
我尝试了&
,也将其转换为%26
,但我仍然遇到同样的问题。
我如何对它们进行编码以在URL中传递它们?
编辑:
我指出,我尝试将其编码为%26
,但它仍然不起作用。
我尝试使用urlencode()
和?s=pizza%26pasta
,当我使用print_r($_GET)
时,我得到:
Array ( [s] => pizza [pasta] => )
编辑2:
我刚刚发现问题实际上与CCD_;一些"in"&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]
%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构建字符串
- 然后使用函数urlencode()对字符串进行正确编码
- 使用$_GET[]时,请确保使用urldecode()将变量设置为其原始格式
希望这有帮助:)
这是我构建的一个原始补丁,它获取数组并查找空键,然后将它们合并到字符串中。不过,它只有在传递单个变量时才起作用。
function arrayToString($array) {
$string = '';
foreach ($array as $key => $value) {
if($value) {
$string = $string.'&'.$value;
} else {
$string = $string.'&'. $key;
}
}
return substr($string,1,strlen($string));
}
这适用于多个变量,以防有人发现它有用:
function arrayToString($array) {
$string = '';
foreach ($array as $key => $value) {
if($value) {
$string = $string.'&'.$key.'='.$value;
} else {
$string = $string.'&'. $key;
}
}
return substr($string,1,strlen($string));
}
return $string
假设您想将以下字符串发送到您的url中:
var1 = "1st Class Ink & Toner"
var2 = "Test1"
var3 = "test3"
现在使用php,
var1 = urlencode(var1); left remain the same.
然后将它们放入url:http://url.com/x=var1&y=var2&z=var3
vKj