ホームページ  >  記事  >  バックエンド開発  >  PHPで中国語の文字列をカスタムインターセプトする方法

PHPで中国語の文字列をカスタムインターセプトする方法

迷茫
迷茫オリジナル
2017-03-26 10:50:161482ブラウズ

php 中国語文字列のカスタム インターセプト - utf8 バージョン

UTF-8 エンコード範囲 (utf-8 は文字のエンコードに 1 ~ 6 バイトを使用しますが、実際には 1 ~ 4 バイトのみを使用します):

1个字节:00——7F
2个字节:C080——DFBF
3个字符:E08080——EFBFBF
4个字符:F0808080——F7BFBFBF
$str = 'abcd我是中国人';

echo strlen($str), &#39;<br/>&#39;;


echo mstrlen($str), &#39;<br/>&#39;;

echo msubstr($str, 3, 9);

/**
 * 统计utf8下字符串长度
 */
function mstrlen($str) {
   $len = 0;
   $i = 0;
   $slen = strlen($str);
   
   while ($i < $slen) {
       $o = ord($str[$i]);
       if ($o < 127) {
           $i++;
       } elseif ($o < 224) {
           $i+=2;
       } else {
           $i+=3;
       }
       $len++;
   }
   return $len;
}
/**
 * 截取utf8编码下的字符串
 */
function msubstr($str, $start, $length) {
    $len = mstrlen($str);
    if($start < 0) {
        $start += $len;
        if($start < 0) {
            $start = 0;
        }
    }
    
    $slen = strlen($str);
    $index = 0;
    for ($i = 0; $i<$start && $i<$slen; $i++) {
        $o = ord($str[$index]);
        if ($o < 127) {
            $index++;
        }elseif ($o < 224) {
            $index+=2;
        } else {
            $index +=3;
        }
    }
    
    $length+=$index;
    
    $newStr = &#39;&#39;;
    for ($i = $index; $i < $length && $i<$slen; $i++) {
        $o = ord($str[$i]);
        if ($o < 127) {
            $newStr .= $str[$i];
        } elseif ($o < 224) {
            $newStr .= substr($str, $i, 2);
            $i+=1;
            $length++;
        } else {
            $newStr .= substr($str, $i, 3);
            $i+=2;
            $length+=2;
        }
    }
    
    return $newStr;
}

以上がPHPで中国語の文字列をカスタムインターセプトする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。