清源绿里

中文wp中的the_content_rss调用问题

今天给朋友建立 wordpress 博客,优化模版时遇到这么一个问题。

该模版首页调用 the_content_rss 函数,并对输出内容大小进行限制。它是这么写的:the_content_rss(”,FALSE,”,50)。但是我发现 post 却是完全输出,并没有削去50个字符以后的内容。

几经折腾发现 the_content_rss 对内容大小限制的对象是 word。再具体一点说就是以空格为界将内容划分为很多的word,然后输出 the_content_rss 需要调用的数目。

问题在于,就英文来说空格的确能作为区分 word 的依据。但对中文来说,除了标点很少有人会在句子中夹杂空格。因此对于中文post,the_content_rss 几乎是输出全文的。

解决办法是修改 wordpress 系统目录下 wp-includes 文件夹里的 feed.php 包含的 the_content_rss 函数。为了不影响其他地方的调用。我们新建一个 the_chinesecontent_rss 。使用字符作为限制的对象,并再写utf8_trim函数清理中文字符截断可能产生的乱码。

具体代码如下:

  1. function the_chinesecontent_rss($more_link_text='(more...)', $stripteaser=0, $more_file='', $cut = 0, $encode_html = 0) {
  2.  
  3. $content = get_the_content($more_link_text, $stripteaser, $more_file);
  4. $content = apply_filters('the_content_rss', $content);
  5.  
  6. if ( $cut && !$encode_html )
  7.       $encode_html = 2;
  8. if ( 1== $encode_html ) {
  9.       $content = wp_specialchars($content);
  10.       $cut = 0;
  11. }
  12. elseif ( 0 == $encode_html ) {
  13.       $content = make_url_footnote($content);
  14. }
  15. elseif ( 2 == $encode_html ) {
  16.       $content = strip_tags($content);
  17. }
  18.  
  19. if ( $cut ) {
  20.       $excerpt =substr($content,0,$cut);
  21.       $excerpt = utf8_trim($excerpt);
  22.       $content = $excerpt.'...';
  23. }
  24. $content = str_replace(']]>', ']]>', $content);
  25. echo $content;
  26. }
  27.  
  28. function utf8_trim($str) {
  29.  
  30.     $len = strlen($str);
  31.  
  32.     for ($i=strlen($str)-1; $i>=0; $i-=1){
  33.          $hex .= ' '.ord($str[$i]);
  34.          $ch = ord($str[$i]);
  35.  
  36.     if (($ch & 128)==0) return(substr($str,0,$i));
  37.     if (($ch & 192)==192) return(substr($str,0,$i));
  38.     }
  39. return($str.$hex);
  40. }

下载该函数:

Download: the_chinesecontent_rss.php  the_chinesecontent_rss.php (1.1 KiB, 2,661 hits)



文章评论

  1. :)-辛苦啦~嘿嘿~

  2. 能做一个txt文件下载吗?我从上面拷贝下来以后再保存总是出错,自己又不懂代码,完全不知道哪里有问题。

  3. 搞定了,多谢提醒。

Leave a Comment

  


无觅相关文章插件,快速提升流量