在我的PHP webservice中,我必须返回一些包含带有JSON格式重音字母的字符串的数组(我用JS在我的客户端应用程序中解析它们)。
但htmlentities
函数用空字符串替换包含带重音字母的字符串!如果我不使用htmlentities
,我会在json_encode
上收到错误。
$a = array('key' => 'èàìòù');
foreach ($a as $k => $v)
$a[$k] = htmlentities($v, ENT_QUOTES | ENT_HTML5, 'UTF-8');
json_encode($a);
我也尝试过ENT_COMPAT
选项,但我只得到空值。
请注意,如果我在print_r
之前使用htmlentities
打印我的数组,则内容正常。
更多信息:
每个文件都是UTF-8,没有BOM格式(用Notepad ++保存)。 我已经尝试添加标头以在我的PHP和HTML中设置UTF-8。 DB表格式为utf8_unicode_ci。
版本:PHP 5.3.3,MySQL 5.5.30-1。
感谢您的帮助!
答案 0 :(得分:2)
您没有在json_encode()
中指定哪个错误,但我怀疑您的传入数据不是UTF-8编码,这会破坏不必要的{{} 1}}调用(您指示期望UTF-8数据)和htmlentities()
(因为该函数要求所有输入数据都是UTF-8)。
确保您编码的数据实际上是UTF-8编码的。那时你根本不需要json_encode()
。
您并未说明数据来自何处,但如果数据来自数据库,则连接有时需要明确设置为UTF-8。见UTF-8 all the way through