2012-08-02 72 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