2012-08-02 40 views
4

我将查询传递给我的搜索结果页面,其变量为:?s=如何在URL中传递'&'符号值?

我正在测试该网站,并发现当查询中有&符号时,当我尝试检索$_GET['s']时,它在&符号中被剪切。

我试过&,同时也将它转换为%26,我仍然有同样的问题。

我如何编码它们以在URL中传递它们?

编辑:

我指出,我试图它编码为%26,它仍然没有工作。

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

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

编辑2:

我刚刚发现这个问题实际上已经做.htaccess似乎变换了“ &东西'在'&东西='。不知道如何解决它在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] 
+3

你试过了urlencode()来 – 2012-08-02 06:23:54

+0

所以要 “&” 也是在一个GET后,所有的声明? – 2012-08-02 06:25:21

+0

我有一种感觉,你的细节中缺少一些东西。你实际上让我仔细检查了这一点,并且我可以在本地和我的一台服务器上使用带'%26'的​​URI确认不会分割变量。 – Leigh 2012-08-02 06:34:19

回答

11

URL编码的amersand(&)到%26是这样做的正确方法。

使用http://yoursite.com?var1=this%26that&var2=other将产生具有两个变量

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

您可以使用函数urlencode自动编码需要编码的所有字符的$_GET超全局数组。这些通常是用来组成URL的组成部分的字符。 ?即在符号(@),冒号(:),问号()等

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

string(9) "one%26two" 
+0

我刚刚发现问题,它的.htaccess似乎使用真正的路径malwork工作正常。我接受任何想法来解决它,我正在写一个PHP的foreach来修补它。 – lisovaccaro 2012-08-02 06:41:10

+0

你应该把你的'.htaccess'放在问题中。 – Leigh 2012-08-02 06:42:35

+0

我刚刚添加它我相信问题在那里,因为如果我去写'/ a /?s = a&b'它不切断&中的值。但是当我去'/ a&b'并让.htaccess重定向时,它确实会将其切割掉 – lisovaccaro 2012-08-02 07:05:31

1

使用步骤:

  1. 首先建立你的字符串中PHP
  2. 然后使用函数urlencode()正确编码您的字符串。
  3. 使用$ _GET []请确保您使用urldecode()获取变量的原始格式。

希望这有助于:)

+0

您不需要在'$ _GET'中的变量上使用'urldecode'。它们由解析引擎解码。 – Leigh 2012-08-02 06:36:06

+0

我刚刚发现问题,它的.htaccess QSA标志,似乎malwork。我接受任何想法来解决它,我正在写一个PHP的foreach来修补它。 – lisovaccaro 2012-08-02 06:39:30

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 
0

假设你想发送下面的字符串到您的网址:

var1 = "1st Class Ink & Toner" 
var2 = "Test1" 
var3 = "test3" 

现在使用php,

var1 = urlencode(var1); left remain the same. 

然后把它们放进网址:http://url.com/x=var1&y=var2&z=var3

vKj