ホームページ >バックエンド開発 >PHPチュートリアル >PHP 文字列インターセプト、中国語およびその他のエンコーディングをサポート_PHP チュートリアル

PHP 文字列インターセプト、中国語およびその他のエンコーディングをサポート_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:10:56895ブラウズ

この記事では、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);
}
?>

www.bkjia.com本当http://www.bkjia.com/PHPjc/444686.html技術記事この記事ではPHPの関数substrをベースに文字列をインターセプトする機能をまとめていますが、中国語に遭遇すると半分の文字がインターセプトされ文字化けしてしまいます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。