我遇到了从UTF-8驱动的InnoDB MySQL数据库返回html的问题 - 实际上是对象,用数据实现并返回由jQuery异步显示。该网站和数据库仅使用UTF-8。
因此,当我发布某些内容时,它会进入数据库,插入,对象将使用我插入的数据完成,并且相应的html会返回到jQuery,遗憾的是,由于某些原因,而不是国家字母,显示的内容如下:{ {1}}等等。
当我刷新网站时,它恢复正常,并且字符显示正确。
想法?
在进入DB类之前:
u0142u00f3
从DB课程回来后:
$strNoBreakSpace = mb_convert_encoding(' ', 'UTF-8', 'HTML-ENTITIES');
$strNormalSpace = mb_convert_encoding(' ', 'UTF-8', 'HTML-ENTITIES');
$ntc = str_replace($strNoBreakSpace, $strNormalSpace, $content);
在向jQuery展示之前:
$thread= str_replace(array(chr(10), chr(13)), '', $thread);
$thread_html = json_encode(array('status' => 1, 'success' => $thread_html));
array_push($results, $upd, $ins, $thread_html);
是striplashes什么废墟吗?我需要添加这个,以及这些mb_converts,否则我在那个html中有json对象的问题,有很多slases / td,/ tr \,\ r \ n \ r \ n等。
jQuery看到的是:
$list = array('success' => stripslashes($result[2]));
答案 0 :(得分:1)
在PHP 5.4中,您可以对JSON_UNESCAPED_UNICODE
使用json_encode
标记。
在PHP 5.3或更低版本中,这是一个辅助函数:
function json_encode_unicode($input) {
return preg_replace_callback(
'/\\\\u([0-9a-zA-Z]{4})/',
function ($matches) {
return mb_convert_encoding(pack('H*',$matches[1]),'UTF-8','UTF-16');
},
json_encode($input)
);
}