昨天说的Wordpress统计插件的显示中文问题,早上在summary页面中会乱码,而在page_views中不会乱码,于是打开源代码看了看,发现在wp-stattraq\reporter中的summary.php的140行,显示标题方法为
< ?php echo htmlentities(stripslashes($row->post_title));?>
而在page_views.php的126行输出标题却是支持打出:$post_title
应该就是 htmlentities,stripslashes两个函数的问题了,经过测试是由于htmlentities函数引起的。
知道原因解决就很简单了
解决方法一,我们就不用这个htmlentities功能了:
改summary.php的140行为
< ?php echo stripslashes($row->post_title);?>
就可以在summary中正确显示中文了。
那这是什么原因引起的呢?为什么stripslashes没问题,而htmlentities会有问题呢?让我们看看php文档:
http://cn.php.net/manual/zh/function.htmlentities.php
与
http://cn.php.net/manual/zh/function.htmlspecialchars.php
发现这么一段话:The default character set is ISO-8859-1,Support for this third argument was added in PHP 4.1.0.
原来默认编码是ISO-8859-1,这两函数支持设置编码,我们只要改一下编码应该就可以正常显示了,
所以解决方法二,保留htmlentities功能吧:
< ?php
echo htmlentities(stripslashes($row->post_title),ENT_NOQUOTES,”UTF-88243);
?>
注:上面第三个参数应该为:UTF-8,不知道为什么显示会有问题。
ENT_NOQUOTES:表示不转换”和’了
注:我Wordpress设置的默认编码为UTF-8
有一个疑问:
为什么stripslashes()处理没问题,而htmlentities呢?
stripslashes只是转换\\ ,\’为 \和’之类的功能,所处理的字符都为ascii,而utf-8兼容ascii。
htmlentities转换各种html标记为代码(怎么描述呢?),而html标记这些东西也应该为ascii吧??难道我想错了?
修改前:
修改后:
呵呵,可能这个系统的这两个功能不是同一个人写的,要不怎么在处理标题上有这么大不一致性呢。虽然这种事情在所难免(即使同一个人开发的),不过对于系统功能一致性的表现上还是需要多注意的。