この記事では、PHP 関数 substr に基づいて文字列をインターセプトする関数をまとめます。 ただし、中国語に遭遇すると、半分の文字がインターセプトされ、文字化けが表示されます。 以下に、中国語およびその他のエンコーディングをサポートするインターセプト プログラムを紹介します。
コードは次のとおりです | コードをコピー |
/** * 文字列インターセプト、中国語およびその他のエンコーディングをサポートします * * @static * @access public * @param string $str 変換する必要がある文字列 * @param string $start 開始位置 * @param string $length 長さを切り捨てる * @param string $charset エンコード形式 * @param string $suffix 表示文字を切り捨てる * @return string */ function msubstr($str, $start=0, $length, $charset="utf -8" , $suffix=true) { if(function_exists("mb_substr")) mb_substr($str, $start, $length, $charset); elseif(function_exists('iconv_substr')) { iconv_substr ($str ,$start,$length,$charset); } $re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef] ][x80 -xbf]{2}|[xf0-xff][x80-xbf]{3}/"; $re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0 -xfe] /"; $re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/"; $re['big5'] = "/[x01- x7f]| [x81-xfe]([x40-x7e]|xa1-xfe])/"; preg_match_all($re[$charset], $str, $match); $slice = join("",array_slice) ($match [0], $start, $length)); if($suffix) return $slice."…"; return $slice; }
|
php substr を直接使用してデータをインターセプトする場合など
英語と中国語の文字が混在すると次の問題が発生します:
そのような文字列がある場合
$str="This is a string";
文字列の最初の 10 文字をインターセプトするには、次のようにします。
if(strlen ($str)>10) $str=substr($str,10)."…";
すると、echo $str の出力は「これは単語です...」となるはずです
$str="これは 1 つの文字列です";
この文字列には半角文字が含まれており、同じ実行:
if(strlen($str)>10) $str=substr($str,10);元の文字列 $str 10 番目と 11 番目の文字は中国語の文字「文字」を構成します
文字列分割を実行すると、中国語の文字は 2 つに分割されるため、インターセプトされた文字列は文字化けします
上記のコード文字を使用すると、コードをインターセプトすると、この問題を簡単に解決できます。
今日は中国語の文字列をインターセプトするより良い方法を見つけたので、それを共有したいと思います。
コードは次のとおりです | コードをコピー |
function msubstr($str, $start, $len) { $tmpstr = ""; $strlen = $start + $len; for ($i = 0; $i < $strlen; $i++) { $i++;
プログラム 2: PHP は UTF-8 文字列をインターセプトし、半文字問題を解決します
/*************************************************** * *************** * PHP は、半文字の問題を解決するために UTF-8 文字列をインターセプトします。 * 英語と数字(半角)は1バイト(8ビット)、中国語(全角)は3バイト * @return $lenが0以下の場合は文字列全体を返します * @ param $str ソース文字列 * $len 左側の部分文字列の長さ ******************************** ** *****************************/
コードは次のとおりです | コードをコピーします | function utf_substr($str ,$len) { for($i=0;$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); } ?> |
|
http://www.bkjia.com/PHPjc/444686.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/444686.html技術記事この記事ではPHPの関数substrをベースに文字列をインターセプトする機能をまとめていますが、中国語に遭遇すると半分の文字がインターセプトされ文字化けしてしまいます...
。