站内公告:

SMF - Just Installed!

Main Menu

UseBB 中文字符截断函数(UTF-8)修改

作者 lonelicloud, 2012-06-22, 16:14:54

« 上一篇主题 - 下一篇主题 »

lonelicloud

在 UseBB 中,在首页"最后发表"栏目要用到一个函数 entities_rtrim,由于 UseBB 是采用的 ISO-8859-1 编码,所以当使用中文的时候,最后一个字符会被截断,进而照成乱码。所以,将该函数修改了一下,以适应中文版式。
找到 UseBB/sources/functions.php,查找函数:*function entities_rtrim*
即下面的部分:
function entities_rtrim($string, $length) {

 $new_string = '';
 $new_length = $pos = 0;
 $entity_open = false;

 if ( function_exists('mb_language') && mb_language() != 'neutral') {

 $strlen = 'mb_strlen';
 $substr = 'mb_substr';

 } else {

 $strlen = 'strlen';
 $substr = 'substr';

 }

 while ( $pos < $strlen($string) && ( $new_length < $length ||
$entity_open ) ) {

 $char = $substr($string, $pos, 1);

 if ( $char == '&' ) {

 $entity_open = true;

 } elseif ( $char == ';' && $entity_open ) {

 $entity_open = false;
 $new_length++;

 } elseif ( !$entity_open ) {

 $new_length++;

 }

 $new_string .= $char;
 $pos++;

 }

 return $new_string;

}


替换成:
function entities_rtrim($str, $lenth)
{
 $start=0;
 $len = strlen($str);
 $r = array();
 $n = 0;
 $m = 0;
 for($i = 0; $i < $len; $i++)
 {
 $x = substr($str, $i, 1);
 $a = base_convert(ord($x), 10, 2);
 $a = substr('00000000'.$a, -8);
 if ($n < $start)
 {
 if (substr($a, 0, 1) == 0)
 {
 }
 elseif (substr($a, 0, 3) == 110)
 {
 $i += 1;
 }
 elseif (substr($a, 0, 4) == 1110)
 {
 $i += 2;
 }
 $n++;
 }
 else
 {
 if (substr($a, 0, 1) == 0)
 {
 $r[] = substr($str, $i, 1);
 }
 elseif (substr($a, 0, 3) == 110) {
 $r[] = substr($str, $i, 2);
 $i += 1;
 }elseif (substr($a, 0, 4) == 1110) {
 $r[] = substr($str, $i, 3);
 $i += 2;
 }else{
 $r[] = '';
 }
 if (++$m >= $lenth){
 break;
 }
 }
 }
 $trunstr=join('',$r);

 return $trunstr;

}


转自:站长百科 - UseBB 中文字符截断函数(UTF-8)修改
欢迎光临水景一页

问题解决后请「修改」原始帖子将其前缀改为「已解决」。

请阅读"论坛管理"里面的置顶内容,帮助维护论坛正常运行,方便你我他!