PHP 5.4.3 情况中测试了一个在 PHP 5.2 情况下运行正常的措施,却发明本应正常提交一其中文字符串到数据库的代码却提交了一个空字符串,颠末排查,该字符串在经 htmlspecialchars 函数转义之前正常,而在转义之后却酿成了空字符串。挪用例子如下:
$str = '中文字符串';
$str_converted =
htmlspecialchars($str);
echo $str_converted;
遂查察PHP手册,获知 htmlspecialchars 函数原型如下:
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 版本开始第三个参数字符串编码的默认值改成了 UTF-8,而我这段代码中的中文编码正好是 GB2312 编码的,跟此刻的默认参数纷歧致,于是变动挪用参数如下:
$str = '中文字符串';
# 为了与旧情况兼容,这里第二个参数没有组合利用 PHP 5.4 新插手的 ENT_HTML401 常量
$str_converted = htmlspecialchars($str, ENT_COMPAT ,'GB2312');
echo $str_converted;
这样,“中文字符串”就可以正常显示了。为了使 PHP 5.4 之前情况中编写的代码可以或许向前兼容,发起挪用 htmlspecialchars 函数的的时候都提供字符串编码参数。