ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルで中国語と英語が混在した文字列の長さを取得する方法

PHP_PHP チュートリアルで中国語と英語が混在した文字列の長さを取得する方法

WBOY
WBOYオリジナル
2016-07-13 10:28:52950ブラウズ

今夜フレームワークのフォーム検証クラスを書いていたとき、特定の文字列の長さが指定された範囲内にあるかどうかを判断する必要があり、当然、PHP の strlen 関数を思い出しました。

コードをコピーします コードは次のとおりです:

$str = 'Hello world!';
echo strlen($str) // 出力12

; ただし、PHPに付属の関数では、strlen と mb_strlen は両方とも長さは、文字列が占めるバイト数を計算することによって計算されます。エンコード条件が異なると、中国語が占めるバイト数も異なります。 GBK/GB2312 では中国語の文字は 2 バイトを占めますが、UTF-8 では中国語の文字は 3 バイトを占めます。
コードをコピーします コードは次のとおりです:

$str = 'Hello, world! ';
echo strlen($str); // GBK または GB2312 では 12 を出力、UTF-8 では 18 を出力

文字列の長さを判断するときは、文字列の占有率ではなく、文字数を判断する必要があることがよくあります。文字列 UTF-8 でのこの PHP コードのようなバイト数:
コードをコピー コードは次のとおりです:

$name = 'Zhang Gengchang';
$len = strlen($name) ;
/ / UTF-8 では 3 つの漢字が 9 バイトを占めるため、FALSE を出力します
if($len >= 3 && $len <= 8){
echo 'TRUE';
}else{
echo 'FALSE ';
}

では、中国語の文字列の長さを取得する便利で実用的な方法はあるのでしょうか?通常のルールを使用して中国語の文字数を計算し、GBK/GB2312 エンコードで 2 で割って、UTF-8 エンコードで 3 で割って、最後に中国語以外の文字列の長さを加算することもできますが、これは面倒すぎます。

WordPress のこのようなコードは、以下を参照してください:

コードをコピーします コードは次のとおりです:

$str = 'Hello, world! ';
preg_match_all('/./us', $str, $match);
echo count($match[0]); // 出力 9

目的は、正規表現を使用して文字列を単一の文字に分割することです。 , そして、count を直接使用して、一致した文字の数を計算します。これが目的の結果です。

ただし、上記のコードではGBK/GB2312の中国語文字列をUTF-8エンコーディングで扱うことができないため、GBK/GB2312の中国語文字は2文字として認識され、計算される中国語の文字数が2倍になるため、このようなことを考えました。方法:

コードをコピーします コードは次のとおりです:

$tmp = @iconv('gbk', 'utf-8', $str);
if(!empty($tmp)) {
$str = $tmp;
}
preg_match_all('/./us', $str, $match);
echo count($match[0]);

GBK/GB2312 および UTF-8 エンコーディングと互換性あり. 少量のデータテストは合格しましたが、それが完全に正しいかどうかはまだ確認されていません。誰かが私にアドバイスをくれることを願っています。

上記の目的は、フレームワークが複数のエンコード形式と互換性があることですが、一般的に日常の開発では、プロジェクトがどのエンコードであるかをすでに決定できるため、次の関数を使用して文字列の長さを簡単に取得できます:

コードをコピーします コードは次のとおりです:

int iconv_strlen ( string $str [, string $charset = ini_get("iconv.internal_encoding") ] )

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/780482.html技術記事今夜フレームワークのフォーム検証クラスを作成していたとき、特定の文字列の長さが指定された範囲内にあるかどうかを判断する必要があったので、当然、PHP の strlen 関数を思い出しました。 コードをコピーします コードは次のとおりです: $s...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。