-
- $tmp = preg_replace('/[一-龥]/u','<@>','こんにちは、私は誰ですか? 123abc');
- /u は UTF-8 です
コピーコード
コード 1、PHP は UTF-8 文字列をインターセプトして半文字の問題を解決します
-
-
/*** - * PHP は UTF-8 文字列をインターセプトし、半文字の問題を解決します。 utf_substr
- * 英語と数字(半角)は1バイト(8ビット)、中国語(全角)は3バイト
- * @return $lenが0以下の場合は文字列全体を返します
- * @param $str ソース文字列
- * $len 左側の部分文字列の長さ
- * @edit bbs.it-home.org
- function utf_substr($str,$len){
- for($i=0;$ i< $len;$i++){
- $temp_str=substr($str,0,1);
- if(ord($temp_str) > 127){
- $i++;
- if($i<$len){
- $ new_str[]=substr($str,0,3);
- $str=substr($str,3);
- }
- }else{
- $new_str[]=substr($str,0,1);
- $ str=substr($str,1);
- }
- }
- return join($new_str);
- }
//呼び出し例
- $str = utf_substr('Hello', 4 );
- echo $str;
- ?>
-
コードをコピー
コード2、utf-8文字列関数をインターセプト
-
-
/** - * utf-8 文字列をインターセプト
- * edit bbs.it-home.org
- */
- function Cut_str($sourcestr,$cutlength){
- $returnstr='';
- $i=0;
- $ n=0;
- $str_length=strlen($sourcestr);//文字列内のバイト数
- while (($n<$cutlength) and ($i<=$str_length)){
- $temp_str=substr( $sourcestr,$i,1);
- $ascnum=Ord($temp_str);//文字列内の $i 番目の文字の ASCII コードを取得します
- if ($ascnum>=224){ //ASCII の場合ビットが高く 224 ,
- $returnstr=$returnstr.substr($sourcestr,$i,3); //UTF-8 エンコード仕様に従って、連続する 3 文字は 1 文字としてカウントされます
- $i=$i +3; //実際のバイトは 3 としてカウントされます
- $n++; // 文字列の長さは 1 としてカウントされます
- }elseif ($ascnum>=192){ //ASCII ビットが 192 より大きい場合、
- $returnstr=$ returnstr.substr($sourcestr,$i, 2); //UTF-8 エンコード仕様に従って、連続する 2 文字は 1 文字としてカウントされます
- $i=$i+2; //実際のバイトは次のようにカウントされます。 2
- $n++; //文字列の長さは 1 としてカウントされます
- }elseif ($ascnum>=65 && $ascnum<=90){ //大文字の場合は
- $returnstr=$returnstr.substr($ sourcestr,$i,1);
- $i=$i+1; //実際のバイト数は 1 としてカウントされます
- $n++; // 全体的な美しさを考慮して、大文字は 1 つの上位ビット文字としてカウントされます。
- }else{ //その他の小文字や半角の句読点を含む場合は、
- $returnstr= $returnstr.substr($sourcestr,$i,1);
- $i=$i+1;実際のバイト数は 1 です
- $n=$n+0.5; //小文字と半角句読点は高文字幅の半分に等しい...
- }
- }
- if ($str_length>$cutlength){
- $ returnstr = $returnstr . "...";//長さを超える場合は末尾に楕円を追加します
- }
- return $returnstr;
- }
//呼び出し例
- $str = 「こんにちは! 元気です」;
- $str =cut_str($str,3);
- echo $str;
- >
-
コードをコピーします
|