基本上... 要看情況,但先寫通用的結論,就是用htmlspecialchars()
但是!!!! 要加幾個參數,完整如下
htmlspecialchars("i'm 魚乾'", ENT_QUOTES, "UTF-8", false)
先說明後面三個parameters,再說明為何不用htmlentities
htmlentities遇到認不出文字,會轉成亂碼or特殊字
中文字加上固定的encoding就ok了,但有些字還是會被encode
結論:
內容並不是我們想轉換的特殊字,所以遇到特殊字就不要理,這是htmlspecialchars的理念
那何時適用htmlentities?
就... 你要encode特殊字的時候....
何時會需要... 存的media不支援特殊字時...吧...
但是!!!! 要加幾個參數,完整如下
htmlspecialchars("i'm 魚乾'", ENT_QUOTES, "UTF-8", false)
先說明後面三個parameters,再說明為何不用htmlentities
- param 2: $flags = ENT_QUOTES
避免SQL Injection,所以一律對單引號做轉換 - param 3: $encoding = "UTF-8",
encoding一定要加,免得被不同版本的PHP影響
5.4 預設"UTF-8"
5.6 是吃default_charset設定 - param 4: $double_encode = false
避免重覆encode, ex: &的&會重覆encode
為何不用htmlentities
因為特殊字元會有亂碼問題htmlentities遇到認不出文字,會轉成亂碼or特殊字
echo htmlentities('魚乾') . PHP_EOL; //é▒ä¹¾ ö echo htmlspecialchars('魚乾 ö'). PHP_EOL; //魚乾 ö //雖然可以decode還原,但如果直接看DB資料時總怪怪的
中文字加上固定的encoding就ok了,但有些字還是會被encode
echo htmlentities('魚乾 ö') . PHP_EOL; //é▒ä¹¾ ö echo htmlentities('魚乾 ö',ENT_QUOTES,"UTF-8") . PHP_EOL; //魚乾 ö 為會轉為 ö echo htmlspecialchars('魚乾 ö'). PHP_EOL; //魚乾 ö
結論:
內容並不是我們想轉換的特殊字,所以遇到特殊字就不要理,這是htmlspecialchars的理念
那何時適用htmlentities?
就... 你要encode特殊字的時候....
何時會需要... 存的media不支援特殊字時...吧...
沒有留言:
張貼留言