redirect_to :future #思维驱动 » Blog Archive » 解决StatTraq的summary页面的中文显示问题

解决StatTraq的summary页面的中文显示问题

昨天说的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吧??难道我想错了?

修改前:

修改后:

呵呵,可能这个系统的这两个功能不是同一个人写的,要不怎么在处理标题上有这么大不一致性呢。虽然这种事情在所难免(即使同一个人开发的),不过对于系统功能一致性的表现上还是需要多注意的。

看完啦?再看看我们最近的10条记录对您是否有用呢?

要不,再找找其它内容:




或者给我们留下些意见、建议,这将给我们莫大的鼓励,促使我们做得更好。