php5.4+在htmlspecialchars轉(zhuǎn)義中文的時(shí)候?qū)⒅形霓D(zhuǎn)義為空了,做了一個(gè)項(xiàng)目找了一天的bug,原來是php5.4 的htmlspecialchars函數(shù)有了新特性了,下面的解決方案來源于網(wǎng)絡(luò)
$oldword = '網(wǎng)站制作學(xué)習(xí)網(wǎng)';
$newword = htmlspecialchars($oldword);
echo $newword;
結(jié)果顯示輸出為空
在我本地測(cè)試的時(shí)候 php5.3.8
$oldword = 'htmlspecialchars轉(zhuǎn)換字符串為空么?網(wǎng)站制作學(xué)習(xí)網(wǎng)';
$newword = htmlspecialchars($oldword);
echo $newword;
結(jié)果顯示輸出:htmlspecialchars轉(zhuǎn)換字符串為空么?網(wǎng)站制作學(xué)習(xí)網(wǎng)
看網(wǎng)上的
獲知 htmlspecialchars 函數(shù)原型如下:
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )
更新日志里面又有提到:
5.4.0 The default value for the encoding parameter was changed to UTF-8.
5.4.0 The constants ENT_SUBSTITUTE, ENT_DISALLOWED, ENT_HTML401, ENT_XML1, ENT_XHTML and ENT_HTML5 were added.
PHP 從 5.4.0 版本開始第三個(gè)參數(shù)字符串編碼的默認(rèn)值改成了 UTF-8,而我這段代碼中的中文編碼正好是 GB2312 編碼的,跟現(xiàn)在的默認(rèn)參數(shù)不一致,于是更改調(diào)用, 為了與舊環(huán)境兼容,這里第二個(gè)參數(shù)沒有組合使用 PHP 5.4 新加入的 ENT_HTML401 常量
$oldword= '測(cè)試新的php5.4 htmlspecialchars轉(zhuǎn)換字符串為空么?網(wǎng)站制作學(xué)習(xí)網(wǎng)';
$newword = htmlspecialchars($oldword, ENT_COMPAT ,'GB2312');
echo $newword;
結(jié)果顯示:測(cè)試新的php5.4 htmlspecialchars轉(zhuǎn)換字符串為空么?網(wǎng)站制作學(xué)習(xí)網(wǎng)'
這樣,“中文字符串”就可以正常顯示了。為了使 PHP 5.4 之前環(huán)境中編寫的代碼能夠向前兼容,建議調(diào)用 htmlspecialchars 函數(shù)的的時(shí)候都提供字符串編碼參數(shù)。
更多信息請(qǐng)查看IT技術(shù)專欄