ホームページ >バックエンド開発 >PHPチュートリアル >PHP文字列インターセプト(UTF-8/GB2312)

PHP文字列インターセプト(UTF-8/GB2312)

WBOY
WBOYオリジナル
2016-06-13 12:33:12937ブラウズ

PHP 文字列インターセプト (UTF-8/GB2312)

1. GB2312 中国語文字列をインターセプト

< ?php?
//中国語の文字列をインターセプト
function mysubstr($str, $start, $len) {
??? $tmpstr = " " ;
??? $strlen = $start $len;
??? for($i = 0; $i <$strlen; $i ) {
??????? (ord(substr($str, $i, 1)) > 0xa0) {
?????????$tmpstr .= substr($str, $i, 2);
? ??????? $i ;
????????? $tmpstr .= substr($str , $i, 1) ;
??? }
??? return $tmpstr;
}
?>

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

< ?php
//utf8 string
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でサポートされるインターセプト機能

< ?php
/*?
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) join( '', array_slice($t_string[0], $start, $sublen))."...";
?????? return join('', array_slice($t_string[0]) , $start, $sublen));?
??? else?
??? $start = $start* 2; ?
?????? $sublen = $sublen*2;?
??????? $strlen = strlen($string);?
???? ?? $tmpstr = '';?
?
????? for($i=0; $i?????? {?
?????????? if($i>=$start && $i?????????{?
????????????if(ord(substr($string, $i, 1))>129)?
????????? ???{?
???????????????$tmpstr.= substr($string, $i, 2);?
? ???????????}?
????????????else?
???????????? ?? {?
???????????????$tmpstr.= substr($string, $i, 1);?
??? ????????? }?
???????????? }?
???????????? if(ord(substr( $文字列, $i, 1))>129) $i ;?
????????? }?
??????? if(strlen($tmpstr)< $strlen ) $tmpstr.= "...";?
??????? return $tmpstr;?
??? }?
}?
?
$str = " abcd がインターセプトする必要がある文字列";?
echo Cut_str($str, 8, 0, 'gb2312');?
?>
4. BugFree の文字インターセプト関数

< ?php?
/**?
?* @パッケージ???? BugFree?
?* @バージョン???? $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $?
?*?
?*?
?* 文字列の一部を返す(拡張function substr())?
?*?
?* @author?????????????????? Chunsheng Wang ?
?* @param string? $文字列?カットする文字列。?
?* @param int ???? $長さ?返された文字列の長さ。?
?* @param booble? $追加しますか? "..." を追加するかどうか: false|true?
?* @return string ??????????切れた紐。?
?*/?
function sysSubStr($String,$Length,$Append = false)?
{?
??? if (strlen($String) ??? {?
????????? $String を返します;?
??? }?
???他に?
??? {?
????????? $I = 0;?
????????? while ($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 = $I 2;?
????????????? }?
????????????他に?
????????????? {?
??????????????? $I = $I 1;?
????????????? }?
???????????? $StringLast[] = $StringTMP;?
????????? }?
????????? $StringLast = implode("",$StringLast);?
????????? if($Append)?
????????? {?
???????????? $StringLast .= "...";?
????????? }?
????????? $StringLast を返します;?
??? }?
}?
?
$String = "CodeBit.cn -- 简单、精彩、通用";?
$Length = "18";?
$Append = false; ?
echo sysSubStr($String,$Length,$Append);?
?>

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