PHP는 중국어 문자열을 가로챌 때 일반적으로 불완전한 가로채기와 문자 깨짐을 방지하기 위해 값이 128보다 크거나 같은지 여부에 따라 더블바이트 문자인지 여부를 결정합니다.
그러나 중국어와 영어가 섞여 있고 특수 기호가 포함되어 있는 상황에 직면하면 문제 해결이 그리 쉽지 않습니다.
다음은 중국어 문자열 가로채기 문제를 종합적으로 해결한 기능입니다. 도움이 필요한 친구들이 참고할 수 있습니다.
참고:
1. len 매개변수는 한자 기준입니다. 1len은 양식을 더 아름답게 만들기 위해
2. false이면 중국어와 영어를 동일하게 취급하고 절대 문자 수를 취합니다.
3. 특히 htmlspecialchars()로 인코딩된 문자열에 적합합니다.
4. GB2312(??)에서 엔터티 문자 모드를 올바르게 처리할 수 있습니다. >
예 :
/**
@Intercept GB2312 인코딩에 적합한 중국어 문자열
@http://www.jbxue.com
*/
함수 FSubstr($title,$start,$len="",$magic=true)
{
$ length = 0;
if($len == "") $len = strlen($title)
//시작 위치가 잘못된 것으로 판단
if ($start > 0 )
{
$cnum = 0
for($i=0;$i<$start;$i++)
{
if(ord(substr ($title,$i ,1)) >= 128) $cnum ++;
}
if($cnum%2 != 0) $start--; $cnum);
}
if(strlen($title)<=$len) return substr($title,$start,$len)
$alen = 0 ;
$blen = 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
$length += 4; 3;
$ 실수 ++;
if($magic)
{
$alen ++;
}
else if(substr($title,$ i,4) == ">")
{
$cstep = 4
$length += 4
$i += 3; 🎜>if($magic )
{
$alen ++;
}
}
else if(substr($title,$i,5) == "&")
{
$cstep = 5;
$i += 4;
$realnum ++; 🎜>$alen ++
}
}
else if(substr($title,$i,6) == """)
{
$cstep = 6;
$length += 6;
$realnum ++
if($magic)
{
$alen ++; $title,$i,6) == "'")
{
$cstep = 6;
$length += 6
$i += 5; +;
if($magic)
{
$alen ++;
}
}
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)
{
$blen ++
$ ctype = 1
}
}
}else{
if(ord($cur)>=128)
{
$cstep = 2; += 2;
$realnum ++;
if($magic)
$blen ++; 🎜>}
}else{
$cstep = 1;
$length +=1;
$realnum ++
if($magic)
{
$ alen++;
}
}
}
if($magic)
{
if(($blen*2+$alen) == ($len*2 )) 중단
if(($blen*2+$alen) == ($len*2+1))
{
if($ctype == 1)
{
$length -= $cstep;
break;
}else{
break;
}
}else{
if($realnum == $len) break;
}
}
unset($alen)
unset($realnum); 🎜>unset($ctype);
unset($cstep)
return substr($title,$start,$length);
?> ;