다음 코드는 GB2312 인코딩에 사용됩니다. 중국어 문자열을 가로채는 것은 PHP에서 골치 아픈 문제입니다. 해결 방법은 문자가 깨지는 것을 방지하기 위해 값이 128보다 크거나 같은지 여부를 결정하는 것입니다. 그러나 중국어와 영어의 혼합, 특수 기호 등의 문제는 항상 존재합니다. 이제 참고용으로 좀 더 포괄적인 내용을 작성하겠습니다.
프로그램 설명:
1. len 매개변수는 한자를 기준으로 하며, 양식을 더 아름답게 만들기 위해 2개의 영문자와 동일합니다.
2. 매직 매개변수를 false로 설정하면 중국어와 영어가 동일하게 취급되며 절대 문자 수를 사용합니다.
3. htmlspecialchars()로 인코딩된 문자열에 특히 적합합니다.
4. GB2312의 엔터티 문자 모드(𖰰)
프로그램 코드를 올바르게 처리할 수 있습니다.
함수 FSubstr($title,$start,$len="",$magic=true)
{
/**
* Smartpig 제공
* 메일 수신:[email protected]
*/
$ 길이 = 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)
;
$blen = 0;
$realnum = 0;
for($i=$start;$i<strlen($title);$i++)
{
$c유형 = 0;
$c단계 = 0;
$cur = substr($title,$i,1);
if($cur == "&")
{
if(substr($title,$i,4) == "<")
{
$c단계 = 4;
$길이 += 4;
$i += 3;
$리얼넘++;
if($매직)
{
$alen++;
}
}
else if(substr($title,$i,4) == ">")
{
$c단계 = 4;
$길이 += 4;
$i += 3;
$리얼넘++;
if($매직)
{
$alen++;
}
}
else if(substr($title,$i,5) == "&")
{
$c단계 = 5;
$길이 += 5;
$i += 4;
$리얼넘++;
if($매직)
{
$alen++;
}
}
else if(substr($title,$i,6) == """)
{
$c단계 = 6;
$ 길이 += 6;
$i += 5;
$리얼넘++;
if($매직)
{
$alen++;
}
}
else if(substr($title,$i,6) == "'")
{
$c단계 = 6;
$ 길이 += 6;
$i += 5;
$리얼넘++;
if($매직)
{
$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;
$리얼넘++;
if($매직)
{
$blen++;
$ctype = 1;
}
}
}또 다른{
if(ord($cur)>=128)
{
$c단계 = 2;
$길이 += 2;
$i += 1;
$리얼넘++;
if($매직)
{
$blen++;
$ctype = 1;
}
}또 다른{
$c단계 = 1;
$길이 +=1;
$리얼넘++;
if($매직)
{
if(ord($cur) >= 65 && ord($cur) <= 90)
{
$blen++;
}또 다른{
$alen++;
}
}
}
}
if($매직)
{
if(($blen*2+$alen) == ($len*2)) break;
if(($blen*2+$alen) == ($len*2+1))
{
if($ctype == 1)
{
$길이 -= $c단계;
부서지다;
}또 다른{
부서지다;
}
}
}또 다른{
if($realnum == $len) 중단;
}
}
설정 해제($cur);
설정되지 않음($alen);
설정되지 않음($blen);
설정되지 않음($realnum);
설정 해제($ctype);
unset($cstep);
return substr($title,$start,$length);
}
ㅎㅎ 나중에 UTF-8 인코딩 코드도 올려보겠습니다.