UseBB 中文字符截断函数(UTF-8)修改
来自站长百科
导航: 上一页
在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; }