PHPでは英語混合版で文字列を扱う際によく使われる関数です。


同前 ある位置が中国語の文字の左か右半分か、あるいは中国語でないかを判断します。  # 戻り値 -1 左 0 中国語の文字ではありません 1 右側  # 使い方  /*  $a. = 'this is 中国語  print is_chinese($a 1) // 0  print is_chinese($a,8) // -1  print is_chinese($a,9) // 1  */  機能 is_chinese(&$str) $location) {  $ch = true;  $i = $location;  while(ord($str[$i])>0 xa && $i >= 0) {  $ch = !$ch;  $i --;  }  if($i) != $location) {  $f_str = $ch ? 1: -1;  }  else {  $f_str = false;  }  return $f_str  }  # 中国語文字列逆さま関数  # 一つは中国語の文字列をstrevで逆さまにすると文字化けが発生します。  /*  print strev('this) is 中国語 // 文の中 シンプル siht  */  機能 c strev(&$str) {  $long = streen($str)  for($f_)str=' $chinese=false、 $i=$long-1; $i>=0 $i--) {  if(ord($str[$i]) > 0 xa 0) {  $chinese = ! $chinese;  if($chinese) == false {  $f_str .= $str[$i].$str[$i+1]  }  }  else {  $f_str .= $str[$i];  }  }  return $f_str  }  /* 中国語文字列切り取り関数  いくつかの中国語文字列の切り取り関数には、常にいくつかの問題があります。  $a=「1中2」  二回切り取った後、  csubstr($str、$a、0、2)  csubstr($str) $a, 2,2)  キャリアの位置は「中」の右バイトを指すため、このような結果になるかもしれません。  1, 2  この関数を使うと、正しい結果が得られます。  1において、 2  */  # start 開始位置は、0から開始します。  # long = 0 startから 文字列の最後まで取ります。  # ltor = true を選択します。 を選択します。  # $cn_len 中国語の文字はバイトでとりますか?それとも字数でとりますか?字数でとりますと、中国語は一つのバイトで計算します。  機能 csubstr(&$str) $start=0、 $long=0、 $ltor=true、 $cn_len=2) {  if($long) == 0) $long = streen($str)  if($ltor) == false $str = c strev($str)  if($cn_)len == 1) {  for($i=0) $fs=0 $i<$start; $fs++)  $i += (ord($str[$fs]) <= 0 xa 0) ? 1 : 0.5;  for($i=0) $fe=$fs; $i<$long; $fe++)  $i += (ord($str[$fe]) <= 0 xa 0) ? 1 : 0.5;  $long = $カフェ。 - $fs;  }  else {  $fs = (is_chinese($str) $start == 1) ? $start - 1 : $start  $カフェ。 = $long + $start - 1;  $end = ( is_chinese($str) $fe) == -1 ) ? $カフェ。 -1 : $fe;  $long = $end - $fs + 1;  }  $f_str = substr($str) $fs $long);  if($ltor) == false $f_str = c strev($f_)str  return $f_str  }  # 左文字列を取ります  # cn_をするlen == 2 時刻 $long 左の何文字を取りますか?逆に左の何バイトを取りますか?  機能 cleft(&$str) $long、 $cn_len=2) {  $f_str = csubstr($str) 0, $long、 true、 $cn_len;  return $f_str  }  # 右文字列を取る  機能 cright(&str) $long、 $cn_len=2) {  $f_str = c strev($str)  $f_str = csubstr($f_)str 0, $long、 true、 $cn_len;  $f_str = c strev($f_)str  return $f_str  }  # 中国語の文字を含む文章の支店フォーマット  # 改行問題による様々な問題は二度と発生しません。  # 注:文章の各行は必ず使われます。 n (chr(13)は支店を行います。  # $width 各行の文字数  # $br 将 行ごとに何の文字を使いますか?  機能 ctext_wrap(&$text) $width=60、 $br=「
」) {  $ライン = explode("n"text);  $ローソン = count($lines)  for($i=0) $i<$ローソン; $i++) {  $len = streen($lines[$i]);  for($j=0) $j<$len; $j+=$width) {  $p = $j + $width - 1;  $k = 0;  if($p<$len) {  while(is_chinese($lines[$i]) $p) && $ライン[$i][$p] != ' ' && $p>$j) {  $k ++;  $p --;  }  if($p == $j) $k = 0;  }  $f_str .= csubstr($lines[$i])は、 $j, $width-$k) . $br;  $j -= $k;  }  }  return $f_str  }