2011-06-12 29 views
10

通過運行我的網站http://validator.w3.org/check,我收到很多錯誤消息,說我的鏈接應該使用&而不是&

所以我更新了我的代碼,只是發現$_GET不喜歡這個。

我的網址是這樣的:www.mysite.com/?foo=1&bar=2
和我改成了這樣:www.mysite.com/?foo=1&bar=2

的問題是,做一個print_r($_REQUEST)給了我這樣的結果:

Array ([foo] => 1 [amp;storeid] => 2) 

爲什麼不$_GET$_POST$_REQUEST承認&

UPDATE
這是我生成一個URL的方式之一:

$url = get_bloginfo('url')."/?foo=".$element['name']."&bar=".$element['id']; 
$link = '<a href="'.$url.'" title="'.$element['name'].'">'.$element['name'].'</a>'; 
+1

你能證明你的代碼? – Nanne 2011-06-12 14:48:48

+1

如何對應的HTML源代碼看? – Gumbo 2011-06-12 14:49:03

+1

可以告訴你那個地方的生成的HTML? – Karolis 2011-06-12 15:02:09

回答

19

&amp;&的HTML實體引用。網址參數仍由一個&分開,但如果您在HTML中提到該網址,則需要對其進行編碼。 For

<img src="img?width=100&amp;height=100" /> 

瀏覽器然後請求img?width=100&height=100

+3

'&'是一個實體引用,它引用名爲* amp *的實體,它的值是'&'。 – Gumbo 2011-06-12 14:57:40

+0

@Gumbo謝謝,修正。 – phihag 2011-06-12 15:00:13

+1

啊,就是這樣!由於我使用的是WP,我只是使用了'esc_url',所有的問題都解決了。謝謝 :) – Steven 2011-06-12 15:44:18

4

您必須是雙重編碼的地方,這樣你的鏈接:

www.mysite.com/?foo=1&bar=2 

變爲:

www.mysite.com/?foo=1&amp;bar=2 

然後:

www.mysite.com/?foo=1&amp;amp;bar=2 

你讀什麼是正確的。爲了澄清,您的HTML&中的必須編碼爲&amp;。當然,URL本身仍然只包含&; PHP從不會看到「&amp;」,因爲該編碼是爲了您的瀏覽器的利益。

0

在任何情況下,手動編碼各種URL部分都不是好習慣。你應該這樣做:

$query_string = 'foo=' . urlencode($element['name']) . '&bar=' . urlencode($element['id']); 
echo '<a href="mycgi?' . htmlspecialchars($query_string) . '">'; 

我認爲這將解決不必要的問題。

1
// Fix for &amp; bug in url 
if($_GET) foreach($_GET as $key => $value) 
{ 
    if(strpos($key, 'amp;') === 0) 
    { 
     $new_key = str_replace('amp;', '', $key); 
     $_GET[ $new_key ] = $value; 
     unset($_GET[ $key ]); 
    } 
} 

它不會與filter_input :(工作