巧用PHP正则表达式替换解决WP自动截断函数中文处理

Vanabel/ 5月 30, 2012/ 站点事务/ 0 comments

问题描述

WP的自动截断函数the_excerpt()可以对文章输出内容进行自动截断. 但是这一截断效果对中文的处理不是很好, 导致有些中文文章的摘要明显长于英文文章. 原因就是中文的标点符号被当成了字符(就像汉字一样), 并不是WP默认的断句符号. 于是一个办法是所有的文章都使用英文标点, 问题基本就解决了. 但是, 我们时不时的转载别人的文章时, 还是会碰到使用的是中文标点的情形, 这样我们不妨写一个php函数对文章输出内容进行过滤:
具体代码如下, 请把它加到你模板的functions.php的最后(但是是在 ?> 之前哈 🙂 )

//replace the chinese character
function ch2en_char($content) {	
 $content = preg_replace('/。/ims', '. ', $content);
 $content = preg_replace('/,/ims', ', ', $content);
 $content = preg_replace('/“/ims', '"', $content);
 $content = preg_replace('/”/ims', '"', $content); 
 $content = preg_replace('/:/ims', ': ', $content); 
 return $content;
}
add_filter('the_content', 'ch2en_char',100);

最后请确保保存代码格式为UTF8, 否则要转码. 例如你用Notepad++的话直接:格式->转为UTF8无BOM编码格式就行了.

再看看你的输出, 是不是长短都差不多了?

注意, 上述代码中介于/与/ims是中文标点符号, 由于我的网站已经替换, 所以你需要手动修改. 即把英文格式的标点换为中文格式的(注意有些替换还有空格也要去掉). 当然你也可以吧加到the_expert中, 这样子可能就不会对正文影响了.

Share this Post

Leave a Comment

您的电子邮箱地址不会被公开。

*
*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据