文字化けしないPHP中国語文字列インターセプト方法とPHP中国語文字インターセプト関数_preg_split()
昨日、コードを書いていたら中国語文字列インターセプトに遭遇しました。 の場合、本来は substr() を直接使いたかったのですが、これはシングルバイト文字の下で使用されるため、マルチバイトでエンコードされた中国語文字やその他の言語の文字の場合、この関数は役に立たない可能性があります。 , 文字化けのインターセプトも簡単になります!
ここで私の仕事の記録と概要を共有します:
問題の生成と使用例の Web サイト: 天気予報 15 日間クエリ (http://tqybw.net)
質問時間: 2013-10-31
解決策のアイデア: エンコード時の完全性ルールに従って中国語の文字を配列に分割し、必要に応じてインターセプトされた長さを取得します。
1. メソッド関数の実装
mbstring 拡張機能を有効にして、関数をカスタマイズします:
<?php
header('content-Type:text/html:charset=utf-8');
function substr_chinese($str, $start, $length = null) {
return join("",
array_slice(
preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $start, $length)
);
} (PS:^_^不错的php学习交流群:276167802,验证:csl,谢谢!)
//实例
$str = "中国地图全图";
echo substr_utf8($str, 0, 4);
//输出: 中国地图
?>
ログイン後にコピー
2. 主な関数の説明 preg_split:
まず、説明 array preg_split ( string $pattern, string $subject [, int $limit [, int $flags]] )
については誰もがよく知っています。
パターンに一致する境界に沿って分割された件名の部分文字列を含む配列を返します。
limit が指定されている場合、最大でも limit の部分文字列が返されます。limit が -1 の場合は、制限がないことを意味し、オプションのパラメーター フラグの指定を続けることができます。
flags には、次のフラグを任意に組み合わせることができます (ビットごとの OR 演算子 | と組み合わせます):
PREG_SPLIT_NO_EMPTY
このフラグが設定されている場合、preg_split() は空ではないコンポーネントのみを返します。
PREG_SPLIT_DELIM_CAPTURE
このフラグが設定されている場合、区切り文字パターン内の括弧式もキャプチャされて返されます。このタグはPHP 4.0.5で追加されました。
PREG_SPLIT_OFFSET_CAPTURE
このタグが設定されている場合、各一致結果に関連付けられた文字列オフセットも返されます。これにより、返された配列の値が変更され、その中の各セルも配列になることに注意してください。最初の項目は一致した文字列で、2 番目の項目はサブジェクト内のそのオフセットです。このタグは PHP 4.3.0 以降で使用できます。
ヒント
正規表現の力が必要ない場合は、explode() や str_split() などのより高速な (そしてよりシンプルな) 代替手段を使用することを選択できます。
3. 配列スライスの説明:
array_slice() 関数は、条件に基づいて配列から値のセグメントを削除し、それを返します。
<?php
$a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
print_r(array_slice($a,1,2));
?>
输出:Array ( [0] => Cat [1] => Horse )
ログイン後にコピー
この記事では、文字化けせずに中国語の文字列をインターセプトする
PHP
方法について説明します。この記事が読者にインスピレーションを与え、疑問の解決に役立つことを願っています。この記事をお読みいただきありがとうございます。