如何通过'&';URL中值内的符号


how do to pass '&' symbol inside value in URL?

我将查询传递到带有变量?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]
将amer和(&)编码为%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"

使用以下步骤:

  1. 首先用PHP构建字符串
  2. 然后使用函数urlencode()对字符串进行正确编码
  3. 使用$_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