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

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

巴扎黑
풀어 주다: 2016-11-22 11:44:48
원래의
1168명이 탐색했습니다.

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

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿