ホームページ >バックエンド開発 >PHPチュートリアル >PHP が中国語の関数 utf_substr をインターセプトする

PHP が中国語の関数 utf_substr をインターセプトする

WBOY
WBOYオリジナル
2016-07-25 08:58:44889ブラウズ
  1. $tmp = preg_replace('/[一-龥]/u','<@>','こんにちは、私は誰ですか? 123abc');
  2. /u は UTF-8 です
コピーコード

コード 1、PHP は UTF-8 文字列をインターセプトして半文字の問題を解決します

  1. /***

  2. * PHP は UTF-8 文字列をインターセプトし、半文字の問題を解決します。 utf_substr
  3. * 英語と数字(半角)は1バイト(8ビット)、中国語(全角)は3バイト
  4. * @return $lenが0以下の場合は文字列全体を返します
  5. * @param $str ソース文字列
  6. * $len 左側の部分文字列の長さ
  7. * @edit bbs.it-home.org
  8. function utf_substr($str,$len){
  9. for($i=0;$ i< $len;$i++){
  10. $temp_str=substr($str,0,1);
  11. if(ord($temp_str) > 127){
  12. $i++;
  13. if($i<$len){
  14. $ new_str[]=substr($str,0,3);
  15. $str=substr($str,3);
  16. }
  17. }else{
  18. $new_str[]=substr($str,0,1);
  19. $ str=substr($str,1);
  20. }
  21. }
  22. return join($new_str);
  23. }

  24. //呼び出し例

  25. $str = utf_substr('Hello', 4 );
  26. echo $str;
  27. ?>

コードをコピー

コード2、utf-8文字列関数をインターセプト

  1. /**

  2. * utf-8 文字列をインターセプト
  3. * edit bbs.it-home.org
  4. */
  5. function Cut_str($sourcestr,$cutlength){
  6. $returnstr='';
  7. $i=0;
  8. $ n=0;
  9. $str_length=strlen($sourcestr);//文字列内のバイト数
  10. while (($n<$cutlength) and ($i<=$str_length)){
  11. $temp_str=substr( $sourcestr,$i,1);
  12. $ascnum=Ord($temp_str);//文字列内の $i 番目の文字の ASCII コードを取得します
  13. if ($ascnum>=224){ //ASCII の場合ビットが高く 224 ,
  14. $returnstr=$returnstr.substr($sourcestr,$i,3); //UTF-8 エンコード仕様に従って、連続する 3 文字は 1 文字としてカウントされます
  15. $i=$i +3; //実際のバイトは 3 としてカウントされます
  16. $n++; // 文字列の長さは 1 としてカウントされます
  17. }elseif ($ascnum>=192){ //ASCII ビットが 192 より大きい場合、
  18. $returnstr=$ returnstr.substr($sourcestr,$i, 2); //UTF-8 エンコード仕様に従って、連続する 2 文字は 1 文字としてカウントされます
  19. $i=$i+2; //実際のバイトは次のようにカウントされます。 2
  20. $n++; //文字列の長さは 1 としてカウントされます
  21. }elseif ($ascnum>=65 && $ascnum<=90){ //大文字の場合は
  22. $returnstr=$returnstr.substr($ sourcestr,$i,1);
  23. $i=$i+1; //実際のバイト数は 1 としてカウントされます
  24. $n++; // 全体的な美しさを考慮して、大文字は 1 つの上位ビット文字としてカウントされます。
  25. }else{ //その他の小文字や半角の句読点を含む場合は、
  26. $returnstr= $returnstr.substr($sourcestr,$i,1);
  27. $i=$i+1;実際のバイト数は 1 です
  28. $n=$n+0.5; //小文字と半角句読点は高文字幅の半分に等しい...
  29. }
  30. }
  31. if ($str_length>$cutlength){
  32. $ returnstr = $returnstr . "...";//長さを超える場合は末尾に楕円を追加します
  33. }
  34. return $returnstr;
  35. }

  36. //呼び出し例

  37. $str = 「こんにちは! 元気です」;
  38. $str =cut_str($str,3);
  39. echo $str;
  40. >

コードをコピーします


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