ホームページ >バックエンド開発 >PHPチュートリアル >PHP 文字インターセプト機能、さまざまな gbk、utf-8 エンコーディングと互換性あり

PHP 文字インターセプト機能、さまざまな gbk、utf-8 エンコーディングと互換性あり

PHP中文网
PHP中文网オリジナル
2017-03-30 16:09:551028ブラウズ

PHP の文字インターセプト関数 substr は、文字化けしないすべての英語のみをインターセプトできます。その中に中国語の文字が含まれている場合は、絶対にインターセプトされません。 以下のエディターでは、さまざまな互換性のある 2 つのコードを紹介します。 gbk および utf-8 エンコーディング。文字列インターセプト関数

例 1

function CsubStrPro($str, $start, $length, $charset = "utf-8", $suffix = false)
{
    if (function_exists ( "mb_substr" ))
        return mb_substr ( $str, $start, $length, $charset );
    $re ['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
    $re ['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
    $re ['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
    $re ['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
    preg_match_all ( $re [$charset], $str, $match );
    $slice = join ( "", array_slice ( $match [0], $start, $length ) );
    if ($suffix)
        return $slice . "…";
    return $slice;
}

例 2

function subString_UTF8($str, $start, $lenth)
    {
        $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(&#39;00000000&#39;.$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[ ] = &#39;&#39;;
                }
                if (++$m >= $lenth){
                    break;
                }
            }
        }
        return $r;
    } // End subString_UTF8;
}// End String

#この関数は配列を返すため、文字列を表示するには join 関数と一緒に使用する必要があります: 例2

#join(&#39;&#39;,subString_UTF8($str, $start, $lenth));

#In ページが表示されるとき、このステートメントの後に「...」を追加することもできます


上記は、さまざまなgbk、utf-8エンコードと互換性のあるPHPの文字インターセプト関数です。関連コンテンツの詳細については、PHP 中国語 Web サイト (www .php.cn) に注目してください。


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