QQ 1640076782

2013年05月31日

php中文字符串截取乱码问题解决

Filed under: phper — 标签:, , , — liphp @ 3:34 上午

很多人写程序的时候都会遇到截取字符串的时候。。当然如果是英文的字符串我们直接可以用substr来截取也不会出现任何问题。但是中文却是不行。因为中文字符所占的字节不一样。。直接截取会出现乱码:那么要如何解决呢:

网站是英文:

采用 substr() 函数截取。

用法:substr() 函数返回字符串的一部分。

语法:substr(string,start,length)

注释:如果 start 是负数且 length 小于等于 start,则 length 为 0。

例子:
<?php
$rest = substr ("abcdef", 3); // returns "ef"
$rest = substr ("abcdef", 1, 5); // returns "bcdef"
?>

采用UFT-8的编码的中文网站一个汉字将占3个字节:

function utf($str, $start, $len) {
        $strlen = $start + $len;
        for($i = $start; $i < $strlen;) {
            if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) {
                $tmpstrs .= substr ( $str, $i, 3 );
                $i=$i+3; // 变量自加3
            } else{
                $tmpstrs .= substr ( $str, $i, 1 );
                $i++;
            }
        }
        return $tmpstrs;
    }
采用GB2312编码的中文网站一个汉字是占2个字节:
function gbsubstr($str, $start, $len) {
        $strlen = $start + $len;
        for($i = $start; $i < $strlen;) {
            if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) {
                $tempstr .= substr ( $str, $i, 2 );
                $i=$i+2; // 变量自加2
            } else{
                $tempstr .= substr ( $str, $i, 1 );
                $i++;
            }
        }
        return $tempstr;
    }