6

我正在使用变量将查询传递给我的搜索结果页面:?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]
4

4 回答 4

16

将反符号 (&) 编码为的 URL%26是执行此操作的正确方法。

使用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"
于 2012-08-02T06:26:51.733 回答
2

使用以下步骤:

  1. 首先在 PHP 中构建你的字符串
  2. 然后使用函数urlencode()正确编码您的字符串。
  3. 使用$_GET[]时,请确保使用urldecode()将变量恢复为原始格式。

希望这可以帮助 :)

于 2012-08-02T06:34:54.980 回答
0

这是我构建的一个原始补丁,它获取数组并查找空白键并将它们合并到一个字符串上。它仅在传递单个变量时才有效。

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
于 2012-08-02T07:08:51.460 回答
0

假设您想将以下字符串发送到您的 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

于 2014-05-13T04:49:12.087 回答