环境:
项目编码为gbk,PHP版本5.4...
问题:
使用htmlspecialchars后汉字消失,成了空字符串
原因:
编码问题,htmlspecialchars的默认编码不支持gbk
相关资料:
以下是手册中的一些说法:
UPGRADING说到
[html]
- the default character set for htmlspecialchars() and htmlentities() is
now UTF-8. In previous versions it was ISO-8859-1. Note that changing
your output charset via the php.ini default_charset directive does not
affect htmlspecialchars/htmlentities unless you are passing "" (an
empty string) as the encoding parameter to your htmlspecialchars/htmlentities
calls.
手册中也说到
[html]
string htmlspecialchars (
string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string
$encoding = 'UTF-8' [, bool $double_encode = true ]]] )
[html]
Defines encoding used in
conversion. If omitted, the default value for this argument is
ISO-8859-1 in versions of PHP prior to 5.4.0, and UTF-8 from PHP 5.4.0
onwards.
解决:
修改默认编码(不支持gbk,所以只能用gb2312了)
$string = htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'gb2312');