ホームページ  >  記事  >  バックエンド開発  >  PHP中国語文字列インターセプト関数

PHP中国語文字列インターセプト関数

WBOY
WBOYオリジナル
2016-07-25 09:11:13746ブラウズ
  1. /****まず第一に、これは CSDN フォーラム PHP xuzuning (しつこい) のボスであり、gb2312、gbk、big の 3 つのエンコーディングをサポートしています。
  2. コードは次のとおりです: ***/
  3. $len = 19;
  4. $text = "長いニュースタイトルの最初の数単語だけを表示して...に置き換えるにはどうすればよいですか?";
  5. echo strlen( $text)<=$len ? $text : (substr($text,0,$len).chr(0)."....");
  6. /****chr(0) は null ではありません
  7. null は何も意味せず、chr(0) の値は 0 です。 16進数で表すと0x00、2進数で表すと00000000になります
  8. chr(0)は何も表示されませんが、文字です。
  9. 中国語の文字が切り詰められると、エンコード規則に従って、必ずその後ろにある他の文字を引き込んで漢字として解釈する必要があり、これが文字化けの原因です。 0x81~0xffと0x00の値の組み合わせは常に「空」として表示されます
  10. この機能により、substrの結果の後にchr(0)を追加することで文字化けを防ぐことができます
  11. 注:
  12. 1バイト目2バイト目をエンコード
  13. gb2312 0xa1-0xf7 0xa1-0xfe
  14. gbk 0x81-0xfe 0x81-0xfe 0x40-0x7e
  15. big5 0xa1-0xf7 0x81-0xfe 0x40-0x7e
  16. 次に、これはオンラインで検索され、元の作成者は不明です:
  17. * ****/
  18. function subString_UTF8( $str, $start, $lenth)
  19. {
  20. $len = strlen($str);
  21. $r = array();
  22. $n = 0;
  23. $m = 0;
  24. for($i = 0; $ i < $len; $i++) {
  25. $x = substr($str, $i, 1);
  26. $a = Base_convert(ord($x), 10, 2);
  27. $a = substr ('00000000 '.$a, -8);
  28. if ($n < $start){
  29. if (substr($a, 0, 1) == 0) {
  30. }elseif (substr($a, 0 , 3) == 110) {
  31. $i += 1;
  32. }elseif (substr($a, 0, 4) == 1110) {
  33. $i += 2;
  34. }
  35. $n++;
  36. }else{
  37. if ( substr($a, 0, 1) == 0) {
  38. $r[ ] = substr($str, $i, 1);
  39. }elseif (substr($a, 0, 3) == 110 ) {
  40. $r[ ] = substr($str, $i, 2);
  41. $i += 1;
  42. }elseif (substr($a, 0, 4) == 1110) {
  43. $r[ ] = substr($ str, $i, 3);
  44. $i += 2;
  45. }else{
  46. $r[ ] = '';
  47. }
  48. if (++$m >= $lenth){
  49. Break; }
  50. }
  51. return $r;
  52. } // End subString_UTF8;
  53. }// End String
  54. #この関数は配列を返すため、文字列を表示するには join 関数を使用する必要があります:
  55. #join( '',subString_UTF8 ($str, $start, $lenth));
  56. #ページが表示されるときにこのステートメントの後に「...」を追加することもできます
コードをコピー
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。