昨日、コードを書いているときに、中国語の文字列をインターセプトするという問題に遭遇しました。本来は 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 の場合は、制限がないことを意味し、オプションのパラメーター フラグの指定を続けるために使用できます。
フラグには、次のフラグを任意に組み合わせることができます (ビットごとの 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 で文字化けせずに中国語の文字列をインターセプトする方法について説明します。この記事が読者にインスピレーションを与え、疑問の解決に役立つことを願っています。