// 説明: Utf-8 および gb2312 でサポートされる漢字インターセプト機能
/*
Utf-8とgb2312で漢字インターセプト機能をサポート
Cut_str(文字列、カット長、開始長、エンコーディング);
エンコードのデフォルトは utf-8 です
開始長のデフォルトは 0 です
*/
関数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));
}
それ以外
{
$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);
その他
$tmpstr.= substr($string, $i, 1);
If(ord(substr($string, $i, 1))>129) $i++;
}
If(strlen($tmpstr)
}
$str = "abcd がインターセプトする必要がある文字列";
echo Cut_str($str, 8, 0, 'gb2312');
?>
注:
コードは次のとおりです |
コードをコピー |
関数 utf8Substr($str, $from, $len)
{
preg_replace('#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$from.'}' を返します。
'((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$len.'}).*#s',
‘$1’,$str);
}
|
uft8 文字列を個別にインターセプトできます。
プログラムの説明:
1. len パラメータは、見た目を良くするために、漢字 2 文字に相当します。
2. マジックパラメータが false に設定されている場合、中国語と英語は同等に扱われ、絶対文字数が取得されます
3. htmlspecialchars() でエンコードされた文字列に特に適しています
4. GB2312 のエンティティ文字モード () を正しく処理できます
プログラムコード:
コードは次のとおりです
コードをコピー |
|
関数 FSubstr($title,$start,$len="",$magic=true)
{
/**
* スマートピッグによる提供
* メールアドレス:d.einstein@263.net */
$長さ = 0;
if($len == "") $len = strlen($title);
//開始位置が間違っていると判断します
if($start > 0)
{
$cnum = 0;
for($i=0;$i
{
if(ord(substr($title,$i,1)) >= 128) $cnum ++
}
if($cnum%2 != 0) $start--;
設定解除($cnum)
}
if(strlen($title)<=$len) return substr($title,$start,$len);
$アレン = 0;
$ブレン = 0;
$realnum = 0;
for($i=$start;$i
{
$ctype = 0;
$cstep = 0;
$cur = substr($title,$i,1);
if($cur == "&")
{
if(substr($title,$i,4) == "<")
{
$cstep = 4;
$長さ += 4;
$i += 3;
$realnum++
if($magic)
{
$アレン++
}
}
else if(substr($title,$i,4) == ">")
{
$cstep = 4;
$長さ += 4;
$i += 3;
$realnum++
if($magic)
{
$アレン++
}
}
else if(substr($title,$i,5) == "&")
{
$cstep = 5;
$長さ += 5;
$i += 4;
$realnum++
if($magic)
{
$アレン++
}
}
else if(substr($title,$i,6) == """)
{
$cstep = 6;
$長さ += 6;
$i += ;
$realnum++
if($magic)
{
$アレン++
}
}
else if(substr($title,$i,6) == "'")
{
$cstep = 6;
$長さ += 6;
$i += ;
$realnum++
if($magic)
{
$アレン++
}
}
else if(preg_match("/(d+);/i",substr($title,$i,8),$match))
{
$cstep = strlen($match[0]);
$length += strlen($match[0]);
$i += strlen($match[0])-1;
$realnum++
if($magic)
{
$ブレン++
$ctype = 1;
}
}
}その他{
if(ord($cur)>=128)
{
$cstep = 2;
$長さ += 2;
$i += 1;
$realnum++
if($magic)
{
$ブレン++
$ctype = 1;
}
}その他{
$cstep = 1;
$長さ +=1
$realnum++
if($magic)
{
$アレン++
}
}
}
if($magic)
{
if(($blen*2+$alen) == ($len*2)) ブレーク;
if(($blen*2+$alen) == ($len*2+1))
{
if($ctype == 1)
{
$length -= $cstep
休憩
}その他{
休憩
}
}
}その他{
if($realnum == $len) ブレーク
}
}
設定解除($cur);
設定を解除($alen)
設定を解除($blen);
設定を解除($realnum)
設定を解除($ctype)
unset($cstep);
substr($title,$start,$length)を返します
}
http://www.bkjia.com/PHPjc/633089.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/633089.html技術記事 phpで文字列をインターセプトする最も簡単な方法はsubstr()関数を使用することですが、substr関数は英語のみをインターセプトできるので、それが使用できると友人が言いました...。
|
|