PHPCMS模板修改省略号“…”部分的全局函数文件 标题截取字符串相关函数

放众博客网络日志   2010年01月15日 16:22   评论»      您可以加入到以下书签收藏网摘:
  • PHPCMS模板修改省略号“…”部分的全局函数文件
  • PHPCMS在默认模板中对于文章标题截取部分使用省略号“…”示意出来,当标题被截取了就使用省略号表示,现在如果要修改这个省略号“…”部分怎么办呢?
  • 在查找PHP的结构后,有一个全局函数是专门修改这些部分的
  • 这个文件的目录在:
    include/global.func.php
  • 打开global.func.php 这个全局函数文件 后可以查找到原始的函数结构
  • function str_cut($string, $length, $dot = ‘…’)
  • str_cut 这个函数就是专门用来截取标题的函数
  • 作用就是截取指定长度的标题字符串长度以及str_replace替换部分内容
  • 在这里如果不要使用省略号作为标题截取后的显示,就把$dot 这个变数设为空值
  • 在PHPCMS中字符串的截取是使用UTF-8的编码的,字母和数字算一个字符长度,中文算两个字符长度,所以在使用UTF8时,如果标题中包括有字母和数字
    那么这个函数截取的还是不准确的
    那么也可以使用mb_类的字串截取函数来修正这个问题
  • 其它部分的修改参考PHP字符串相关函数

代码部分:

  1. function str_cut($string, $length, $dot = '')
  2. {
  3. $strlen = strlen($string);
  4. if($strlen <= $length) return $string;
  5. $string = str_replace(array('&nbsp;', '&amp;', '&quot;', '&#039;', '&ldquo;', '&rdquo;', '&mdash;', '&lt;', '&gt;', '&middot;', '&hellip;'), array(' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string);
  6. $strcut = '';
  7. if(strtolower(CHARSET) == 'utf-8')
  8. {
  9. $n = $tn = $noc = 0;
  10. while($n < $strlen)
  11. {
  12. $t = ord($string[$n]);
  13. if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
  14. $tn = 1; $n++; $noc++;
  15. } elseif(194 <= $t && $t <= 223) {
  16. $tn = 2; $n += 2; $noc += 2;
  17. } elseif(224 <= $t && $t < 239) {
  18. $tn = 3; $n += 3; $noc += 2;
  19. } elseif(240 <= $t && $t <= 247) {
  20. $tn = 4; $n += 4; $noc += 2;
  21. } elseif(248 <= $t && $t <= 251) {
  22. $tn = 5; $n += 5; $noc += 2;
  23. } elseif($t == 252 || $t == 253) {
  24. $tn = 6; $n += 6; $noc += 2;
  25. } else {
  26. $n++;
  27. }
  28. if($noc >= $length) break;
  29. }
  30. if($noc > $length) $n -= $tn;
  31. $strcut = substr($string, 0, $n);
  32. }
  33. else
  34. {
  35. $dotlen = strlen($dot);
  36. $maxi = $length - $dotlen - 1;
  37. for($i = 0; $i < $maxi; $i++)
  38. {
  39. $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
  40. }
  41. }
  42. $strcut = str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&#039;', '&lt;', '&gt;'), $strcut);
  43. return $strcut.$dot;
  44. }


评论已关闭。