带有PHP的重音字母:htmlentities和json_encode

时间:2013-07-03 13:40:23

标签: php html json html-entities

在我的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。

感谢您的帮助!

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