ホームページ  >  記事  >  バックエンド開発  >  PHP インターセプト文字列の特別なコレクション_PHP チュートリアル

PHP インターセプト文字列の特別なコレクション_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:35:01746ブラウズ

1、UTF-8、GB2312は漢字インターセプト機能をサポートします

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

/*
Utf-8、gb2312は漢字インターセプト機能をサポートします
cut_str (文字列、カット長、開始長、エンコーディング);
デフォルトのエンコーディングは 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))."…";
return join('', array_slice($t_string[0], $start, $sublen))
}
else
{
$ start = $start*2;
$strlen = strlen($string)
for($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.= "…"; "abcd はインターセプトされた文字列を必要とします";
echo Cut_str($str, 8, 0, 'gb2312');



2. utf8 でエンコードされたマルチバイト文字列をインターセプトします



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

//utf8文字列をインターセプト function utf8Substr($str, $from, $len)
{
return preg_replace('#^(?:[x00-x7F]|[ xC0 -xFF][x80-xBF]+){0,'.$from.'}'.'((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0, ' .$len.'}).*#s', '$1',$str);
3. GB2312 中国語文字列をコピーします

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


//中国語の文字列をインターセプト
function mysubstr($str, $start, $len) {
$tmpstr = ""; for($ i = 0; $i < $strlen; $i++) {
if(ord(substr($str, $i, 1)) > 0xa0) {
$tmpstr .= substr($str, $ i, 2 );
$i++;
$tmpstr .= substr($str, $i, 1); return $tmpstr;
4. コードをコピーします
コードは次のとおりです:


/**
* @package BugFree
* @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
*
*
* 文字列の一部を返す(関数 substr( ))
*
* @param string $String カットする文字列。
* @param int $Length 返される文字列の長さ。
* @param booble $Append "…" を追加するかどうか: false|true
* @return string 切り取られた文字列。
*/
function sysSubStr($String,$Length,$Append = false)
{
if (strlen($String) < = $Length )
{
return $String; else { $I = 0; while ($I < $Length)
{
$StringTMP = substr($ String,$I,1 );
if ( ord($StringTMP) >=224 )
$StringTMP = substr($String,$I,3); elseif( ord($StringTMP ) >=192 )
{
$StringTMP = substr($String,$I,2);
$I = $I + 2
}
else
{
$I = $I; + 1;
}
$StringLast[] = $StringTMP;
$StringLast = implode("",$StringLast)
{
$StringLast .= "…"; $StringLast;
}
}
$String = "http://www.jb51.net — シンプル、素晴らしい、ユニバーサル";
$Append = false; $Length,$Append) ;
?>



dedecms のインターセプト コード

これは dedecms から直接取得したコードであり、少し変更することができます。



コードをコピーします

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

//中国語インターセプト 2、シングルバイトインターセプトモード
//リクエストの内容である場合、この関数を使用する必要があります
function cn_substrR($str,$slen,$startdd=0)
{
$str = cn_substr(stripslashes ($str),$slen,$startdd);
returnaddslashes($str)
}
//中国語インターセプト 2、シングルバイトインターセプトモード
function cn_substr($str,$slen,$startdd) =0)
{
グローバル $cfg_soft_lang;
if($cfg_soft_lang=='utf-8')
{
return cn_substr_utf8($str,$slen,$startdd)
}
$restr = ''; c = '' ;
$str_len = strlen($str);
if($str_len < $startdd+1)
{
return '';
if($str_len < $startdd + $slen || $slen== 0)
{
$slen = $str_len - $startdd;
}
$enddd = $startdd + $slen - 1;
for($i=0;$i<$str_len;$i++)
{
if( $startdd==0)
{
$restr .= $c;
}
else if($i > $startdd)
{
$restr .= $c;
if(ord( $str[$ i])>0x80)
{
if($str_len>$i+1)
{
$c = $str[$i].$str[$i+1]
}
$ i++;
}
else
{
$c = $str[$i];
if($i >= $enddd)
{
if(strlen($restr)+strlen($c)> $slen)
{
break;
}
else
{
$restr .= $c;
}
}
return $restr;
//utf-8インターセプトモード
function cn_substr_utf8($str, $length, $start=0)
{
if(strlen($str) < $start+1)
{
return ''
}
preg_match_all("/./ su", $ str, $ar);
$str = '';
$tstr = '';
//mysql4.1 より前のバージョンと互換性を持ち、データベースの varchar と一貫性を保つために、バイトごとにここではインターセプトが使用されます
for($i=0; isset($ar[0][$i]); $i++)
{
if(strlen($tstr) < $start)
{
$tstr .= $ar[0][$i];
}
else
{
if(strlen($str) < $length + strlen($ar[0][$i]) )
{
$str .= $ ar[0][$i];
} else
{
break;
}
}
return $str;



phpcms の文字列インターセプト コード:



コード

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

function str_cut($ string, $length, $dot = '...') {
$strlen = strlen($string);
if($strlen <= $length); $string を返す;
$string = str_replace(array(' ', '&', '"', ''', '"', '"', '—', '<', '>', ' ·', '…')、array(' '、'&'、'"'、"'"、'"'、'"'、'—'、'<'、'>'、'・' , '…'), $string); $strcut = ''; if(strto lower(CHARSET) == 'utf-8') { $n = $tn = $noc = 0; n < $strlen)
{
$t = ord ($string[$n]);
if($t == 9 || $t == 10 || (32 <= $t && $t < ;= 126)) {
$tn = 1; $n++;
} elseif(194 <= $t && $t <= 223) { $n += 2; noc += 2;
} elseif(224 <= $t && $t <239) {
$tn = 3; $noc += 2; t && $t <= 247) {
$tn = 4; $n += 4; $noc += 2;
} elseif(248 <= $t && $t <= 251) { = 5; $noc += 2;
} elseif($t == 252 || $t == 253) {$n += 6; ;
} else {
$n++;
} if ($noc > $length) $n -= $tn;文字列, 0, $n);
}
else
{
$dotlen = strlen($dot);
$maxi = $length - $dotlen - 1; $i {
$strcut .= ord( $string[$i]) > $string[$i].$string[++$i] : $string[$i];
$strcut = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<' , '>'), $strcut);
$strcut.$dot;





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

www.bkjia.com

tru​​e

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

技術記事

1. UTF-8 および GB2312 でサポートされている漢字インターセプト関数のコピー コードは次のとおりです: ?php /* 漢字インターセプト関数 Cut_str (文字列、インターセプト長、開始長、エンコーディング...



)

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