文字列インターセプトは非常に一般的なプログラミング タスクであり、漢字を使用した文字列インターセプトがよく使用されます。難しくはありませんが、関数を自分で書くのは時間がかかります。ここでは、基本的なニーズを満たすことができる、比較的使いやすい文字列インターセプト関数を紹介します。
1. GB2312 中国語文字列をインターセプト
コードをコピーします コードは次のとおりです:
< ?php
//中国語の文字列をインターセプト
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 でエンコードされたマルチバイト文字列
コードは次のとおりです: < ?php //Intercept 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. UTF-8 および GB2312 でサポートされる漢字インターセプト機能
< ?php /* 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))."..."; $t_string[0] , $start, $sublen));
}
{
$start = $start*2; >$strlen = strlen ($string);
$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 がインターセプトする必要がある文字列";
echo Cut_str($str, 8, 0, 'gb2312 ');
?> >
< ?php
/**
* @package BugFree
* @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
*
*
* Return文字列の一部(substr()関数を拡張)
*
* @author Chunsheng Wang
* @param string $String 切り取る文字列。
* @param int $Length 返される文字列の長さ。
if (strlen( $String) < = $Length ) { return $String; } else
{$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;
else
{
$I
}
$StringLast [] = $StringTMP;
}
$StringLast = implode("",$StringLast)
{
$StringLast .= "...";
return $StringLast;
}
$String = "17test.info は中国の自動テストの最前線にあります"; >$Length = "18";
$Append = false;
;