>백엔드 개발 >PHP 튜토리얼 >PHP 중국어 문자열 가로채기 PHP 가로채기 중국어 문자열 코드

PHP 중국어 문자열 가로채기 PHP 가로채기 중국어 문자열 코드

巴扎黑
巴扎黑원래의
2016-11-22 11:44:481181검색

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);
?> ;

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP 삽입 정렬다음 기사:PHP 삽입 정렬