ホームページ  >  記事  >  バックエンド開発  >  PHP 文字列インターセプトの問題_PHP チュートリアル

PHP 文字列インターセプトの問題_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 16:00:02876ブラウズ

しかし、英語と中国語の文字が混在すると、次の問題が発生します:

そのような文字列がある場合
$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);
string $str 10番目と11番目の文字は漢字「記号」を構成します
文字列分割を実行すると、漢字は2つに分割されるため、傍受された文字列は文字化けします。


この問題を解決するにはどうすればよいですか?長すぎる文字列を分割したくても文字化けすることはできませんか?

コードをコピーします コードは次のとおりです:

//村にはたくさんありますが、これはgb2312です
function substrs($content,$length='30')
{
if($length && Strlen ($ Content) & gt; $ length) {
$ num = 0;
for ($ i = 0; $ i & lt; $ length-3; $ i ++) {
if (またはコンテンツ [$ i] )>127)
$content =substr($content,0, $length-3);
$content を返す
}
?>





コードをコピーします

コードは次のとおりです:

function Cutstr($string, $length, $dot = ' .. .') { $strcut = ]) > 127 ? .$文字列[++$i] : $string[$i]; コードは次のとおりです:

function cutTitle($str, $len, $tail = ""){
$length = strlen($str);
$lentail = strlen($tail);
$result = "";
if($length > $len){
$len = $len - $lentail;
for($i = 0;$i < $len;$i ++){
if(ord($str[$i]) < 127){
{ $result .= $str[$i];
else{
$result .= $str[$i];
++ $i;
$result .= $str[$i];

}
$result = strlen($result) > $レン? substr($result, 0, -2) 。 $tail : $result 。 $テール;
}else{
$result = $str;
}
$result を返す;
}

以下はいくつかの内容です:
1. 截取GB2312中文字符列
代码如下:
复制代代码如下:

//截取中文字符列
function mysubstr($str, $start, $len) {
$ tmpstr = "";
$strlen = $start + $len;
for($i = 0; $i < $strlen; $i++) {
if(ord(substr($str, $i, 1)) > 0xa0) {
$tmpstr .= substr($str, $i、2);
$i++;
} else
$tmpstr .= substr($str, $i, 1);
}
$tmpstr を返します。
}
?>

2. 截取utf8文字列の多字节文字列
代码如下:
复制代代码如下:

//截取utf8文字列
function utf8Substr($str, $from, $レン)
{
return preg_replace('#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$from.'}'.
'((?:[ x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}
?>

3. UTF-8、GB2312都サポートの汉字截取関数数
代码如下:
复制代码 代码如下:

/*
Utf-8 および gb2312 でサポートされている漢字インターセプト関数
cut_str(string, インターセプト長, 開始長, エンコーディング)
デフォルトのエンコーディングは utf-8 です
デフォルトの開始長は 0 です
*/function Cut_str($string, $sublen, $start = 0, $code = 'UTF-8')
{
if($code == 'UTF-8')
{
$pa ="/[ x01 -x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf] [ x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/";
preg_match_all($pa, $string, $t_string); if(count) ( $t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."..."; array_slice ($t_string[0], $start, $sublen));
}
else
{
$start = $sublen*2;
$tmpstr = ''; for($i=0; $i<$strlen; $i++)
{
if($i>=$start && $i<($start+$sublen))
{
if( ord (substr($string, $i, 1))>129)
{
$tmpstr.= substr($string, $i, 2);
}
else
{
$tmpstr.= substr($string) , $i, 1);
}
}
if(ord(substr($string, $i, 1))>129) $i++;
}
if(strlen($tmpstr)<$strlen ) tmpstr .= "...";
return $tmpstr;
}
}$str = "abcd がインターセプトする必要がある文字列"; ;


4. BugFree の文字インターセプト関数
コードは次のとおりです:


コードをコピーします

コードは次のとおりです:
/*** @package BugFree
* @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
*
*
* 文字列の一部を返す(関数 substr( ))
*
* @author Chunsheng Wang
* @param string $String カットする文字列。
* @param int $Length 返される文字列の長さ。
* @param booble $Append "..." を追加するかどうか: false|true
* @return string 切り取られた文字列。
*/
function sysSubStr($String,$Length, $Append = false)
{
if (strlen($String) {
return $String;
}
else
{
$I = 0; ($I {
$StringTMP = substr($String,$I,1);
if ( ord($StringTMP) >=224 )
{
$StringTMP = substr($String,$ I,3);
$I = $I + 3;
elseif( ord($StringTMP) >=192 )
{
$StringTMP = substr($String,$I,2); $I + 2;
else
{
$I = $I + 1;
$StringLast[] = $StringTMP;
$StringLast = implode("",$StringLast);追加)
{
$StringLast . = "..."
}
$StringLast
}$String = "www.baidu.com"
$Append = false ;
エコー sysSubStr($String, $Length,$Append)

;



http://www.bkjia.com/PHPjc/317176.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/317176.html

技術記事

ただし、英語と中国語の文字が混在している場合、次の問題が発生します。 $str="This is a string"; という文字列があった場合、文字列の最初の 10 文字をインターセプトするには、if(strle...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。