我遇到了附加html的问题,从UTF-8支持的InnoDB MySQL数据库返回——对象实际上是由数据完成的,并返回由jQuery异步显示。网站和数据库只使用UTF-8。
当我发布内容时,它会进入数据库,插入,对象会被我插入的数据填满然后适当的html返回给jQuery,不幸的是,由于某些原因,它显示的不是国家字母,而是u0142u00f3
等
刷新后,网页恢复正常,字符显示正常
想法?
在进入DB类之前:
$strNoBreakSpace = mb_convert_encoding(' ', 'UTF-8', 'HTML-ENTITIES');
$strNormalSpace = mb_convert_encoding(' ', 'UTF-8', 'HTML-ENTITIES');
$ntc = str_replace($strNoBreakSpace, $strNormalSpace, $content);
从DB类返回后:
$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);
显示给jQuery之前:
$list = array('success' => stripslashes($result[2]));
是横杠毁了它吗?我需要添加这个,这些mb_convert,否则我有问题的json对象内的html,有很多slases/td,/tr, rr等。
jQuery看到的是:
{"status":1,"success":"<tr> <td class="col-md-1">27.09.15</td>ttt <td class="col-md-1 ws-nowrap"><a href="#"><span class="label label-info label-as-badge">Test</span></a></td> <td class="col-md-5"><a href id="id" name="id" href="#">u0142u00f3</a></td> <td class="col-md-5">u0142u00f3</td> </tr>"}
在PHP 5.4中,json_encode
可以使用JSON_UNESCAPED_UNICODE
标志
在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)
);
}