2013-08-01 84 views
0

我遇到特殊字符問題。例如。在數據庫中寫入「A & A」(數據庫設置爲utf8-unicode-ci)。 我檢索在autosugest列表中的值正確地:PHP從數據庫中獲取特殊字符

while ($row = mysql_fetch_array($result)) { 
    $keywords = htmlspecialchars($row['name']); 
echo "<keywords>". $keywords ."</keywords>";  
} 

當我點擊輸入框,選擇「A & A」被填充爲A &放大器; A

標頭設置於:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 您能否讓我知道如何顯示特殊字符?

+0

這是用htmlspecialchars的我猜的工作? – HamZa

+0

你是HTML在某處過多地轉義的地方。 – deceze

回答

0

如果您在數據庫中有「A & A」,htmlspecialchars會這樣做。

刪除htmlspecialchars。

+0

你想推廣XSS? – HamZa

+0

@HamZa什麼?請留在主題上。 – Parrotmaster

+0

我在話題上,你爲什麼認爲人們使用'htmlspecialchars'? – HamZa

4

如果您想從A &amp; A轉換爲A&A,請在文本上使用htmlspecialchars_decode
如果您想將A&A轉換爲A &amp; A,請使用htmlspecialchars

在你的情況下刪除htmlspecialchars操作對從你的數據庫中拉出的文本將做。 由於你的問題似乎與&字符被替換爲&amp;,可能運行一些像$text = str_replace("&amp;", "&", htmlspecialchars($text));將更好地爲您工作,並防止XSS。

+0

他不想轉換任何東西,但他仍然這樣做,這就是他看到&的原因。 – Parrotmaster

+0

你想推廣XSS? – HamZa

+0

@HamZa在那裏,這個工作更好嗎? –

0

在將值插入數據庫之前,更好地使用rawurlencode。然後,每當您提取值時,請使用rawurldecode。我認爲這可能會解決你的問題。

rawurldecode($row['name']); 

入住這http://php.net/manual/en/function.rawurlencode.php

+0

請閱讀你提供的鏈接。它說'要編碼的URL',所以這並不意味着用於隨機數據。 – HamZa

+1

請提供一個令人信服的理由,使用HTML或URL編碼來處理數據庫中的數據,特別是爲什麼URL編碼會打敗HTML編碼。 – deceze

+0

這是正確的答案,請嘗試閱讀文檔。 – devo