在URL

2010-08-27 27 views
2

下面的鏈接工作正常,除非該變量$row["title"]包含雙引號(「)使用雙引號。在這種情況下,引號後,一切都在鏈路省略。在URL

如何我可以使鏈接包括雙引號之後的一切嗎?提前

感謝,

約翰

echo '<td class="sitename2"><a href="http://www...com/.../comments/index.php?submission='.$row["title"].'">'.$row["countComments"].' COMMENTS</a></td>'; 

回答

7

始終使用urlencode爲如果你想進入的標準,可能需要包含什麼不尋常....

echo '<td class="sitename2">'. 
    '<a href="http://www...com/.../comments/index.php?submission='. 
    urlencode($row["title"]). 
    '">'. 
    $row["countComments"].' COMMENTS</a></td>'; 

一個URL的一部分,是指RFC3986它定義了安全,或'無保留'的字符如下:

unreserved = ALPHA/DIGIT /「 - 」/「。」 /「_」 /「〜」

進行urlencode可以確保您要在URL中包括一個值按這些標準

+0

+1對於標準:) – srinivas 2010-08-27 10:15:44

+1

FWIW,較新的[RFC 3986](http://www.ietf.org/rfc/rfc3986.txt)說只有'-._〜'是特殊的(所以你可以還需要編碼'!*'()')。 – 2014-11-19 00:21:12

+0

謝謝卡爾,我已經修改了答案以引用更新的RFC – 2014-11-19 12:18:46

5

確保您urlencod e你的URL參數值。看到urlencode

2
. urlencode($row['title']) . '"> etc 
2

的網址中的參數值必須按順序逃過該網址是有效的。

所以不是

$row["title"] 

使用

urlencode($row["title"]) 

進行urlencode將改變雙引號爲%22所以你會避免錯誤的雙引號結束您的鏈接的問題。

傑羅姆·瓦格納

1

在我的情況下,進行urlencode沒有幫助,我用urlencode ($var),結果在瀏覽器中: 本地主機/ 「aaMoldau ++澳元+ DEM + Zyklus ++」 我的+ Vaterland 「」/

什麼瀏覽器說:

一個錯誤時遇到

您提交已禁用的字符的URI。

這裏是我的MySQL入門($ VAR):

aaMoldau - 澳大利亞DEM Zyklus 「我的Vaterland」

更新:

在開始和$ VAR結束時的報價是明確,因爲我插入了它們,但仍然存在錯誤。

(我不明白爲什麼在用urlencode開始和最終產生雙引號)。

此外,前「拜見」和Vaterland後的雙引號應該被刪除?

更新2: 我現在使用 str_replace與urlencode一起刪除雙引號,這很好。但我認爲我不需要str_replace?

此外,我讀了另一個帖子,建議將我允許的uri字符更改爲: $ config ['permitted_uri_chars'] ='+ = \ a-z 0-9〜%。:_-';

在這裏CodeIgnite是問題,但現在解決了。奇怪的是,CI不接受空間中需要的+原則。