【转】Drupal字符串截取函数 truncate_utf8()

      truncate_utf8($string, $len, $wordsafe = FALSE)

      该函数以安全的方式截取UTF-8编码格式的字符串,一直令我很头疼的评论标题问题主要就是它运用不合理造成的。
参数解释:
$string 想被截段的字符串。
$len 函数执行后返回字符串的长度上限。
$wordsafe 标志符。TRUE表示在最近的空格处截断并返回;FALSE则不。drupal的API参考指名默认FALSE。
返回值就是截取下来的字符串。

      之前参考的drupal论坛里的补丁均在用户没有留下评论标题(subject)的情况下,将评论内容字符串截取一段,然后作为“最新评论”栏里的标题。 但不知是何原因$wordsafe都被设置成TRUE,事实上这样很不合理,尤其是在中文情况下,一句话可能很长,在截取时容易出差错。 所以建议中文用户把第三个参数改成FALSE。至于第二个参数,就要看你想显示多长的标题了。

函数代码如下:

function truncate_utf8($string, $len, $wordsafe = FALSE) { 
    $slen = strlen($string); 
    if ($slen <= $len) { 
        return $string; 
    } 
    if ($wordsafe) { 
        while (($string[–$len] != ' ') && ($len > 0)) {}; 
    } 
    if ((ord($string[$len]) < 0x80) || (ord($string[$len]) >= 0xC0)) { 
        return substr($string, 0, $len); 
    } 
    while (ord($string[–$len]) < 0xC0) {}; 
    
    return substr($string, 0, $len); 
}

将如上函数添加到主题下面的template.php文件中,就可以直接调用了。截取中文的效果不错。
转自:i3 server的空间http://hi.baidu.com/i3server/blog/item/e93ed525aca89d3ac89559cc.html

发表评论

邮箱地址不会被公开。 必填项已用*标注

机器人检查 *

分享我的最新文章标题到这里

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