2013-02-24 101 views
1

我一直在閱讀幾個小時,並且無法完全解決編碼問題。我使用PHP 指定charset = utf-8。 我希望能夠輸入某些字符,例如子彈•和箭頭⇒進入textarea。 我直接保存到mySQL數據庫,並且符號被正確存儲在那裏。 要顯示數據庫中保存的文本,我調用以下函數來轉換textarea的存儲符號。在php中保存特殊字符

function htmlspecialchars2($string, $flags=ENT_NOQUOTES){ 
$string = htmlspecialchars($string, $flags); // to help prevent code injection 
$string = str_replace(chr(149), "&#8226", $string); // converts bullet to html 
$string = str_replace("⇒", "&#8658",$string); // don't know the ascii code for the arrow 
return $string; 
} 

這適用於子彈,但不適用於箭頭。任何建議如何保存(然後重新顯示)擴展的HTML字符。我已經閱讀了所有我能找到的東西,但我錯過了一些東西。

+0

爲什麼不直接使用htmlspecialchars的charset參數? – mario 2013-02-24 00:18:59

+0

嘗試'utf8_decode()'? – michi 2013-02-24 00:20:59

回答

2

您可能正在尋找htmlentities。這應該將具有HTML字符實體的所有字符轉換爲HTML實體(以反轉使用html_entity_decode)。


PS:我的系統上,htmlentities('⇒', ENT_COMPAT, 'UTF-8')返回⇒

+0

當我使用$ string = htmlentities($ string,ENT_COMPAT,'UTF-8')時,textarea爲空。如果我使用上面的代碼(只有箭頭),它會顯示箭頭。 – mseifert 2013-02-24 00:40:00

+0

做'var_dump($ string)'? – 2013-02-24 00:44:12

+0

string''(length=0) 
---如果沒有'UTF-8'參數,它會顯示所有文本,但箭頭顯示爲 – mseifert 2013-02-24 00:48:39

1

對於任何人後面,該解決方案必須需要2份

1)ヶ輛因一米招的小馬(自提謝謝)!這是真正的答案。

2)但是,另一半需要顯式設置會話的編碼。 mysqli_set_charset($ link,「utf8」);

注意:新代碼要簡單得多。如上所示,我可以簡單地調用htmlentities($ string,ENT_NOQUOTES,'UTF-8')