중국어 문자열을 가로채기 위해 substr을 직접 사용하면 중국어 문자가 절반으로 나누어지기 때문에 확실히 문자가 깨집니다. 왜 이런 일이 발생하는 걸까요? 이제 기계 내부 인코딩 문제 때문일까요?
1 솔루션을 살펴보세요. mbstring 확장 라이브러리의 mb_substr 차단을 사용하면 잘못된 문자가 나타나지 않습니다.
2. 차단 기능을 직접 작성하지만 mbstring 확장 라이브러리를 사용하는 것만큼 효율성이 높지 않습니다.
3. 단지 가로채는 문자열을 출력하는 것이라면 다음과 같이 구현할 수 있습니다: substr($str, 0, 30).chr(0).
PHP 예시 코드는 다음과 같습니다.
* 한자의 잘못된 가로채기를 방지할 수 있습니다
* 매개변수 $str은 문자열, $start는 시작 문자, $len은 끝 문자
* 가로채는 문자를 반환합니다.
*/
function msubstr($str, $start, $len) {
$tmpstr = "";//Open 소스 코드 phpfensi.com
$ strlen = $start + $len
for($i = 0; $i < $strlen; $i++) {
if(ord(substr($str, $i, 1)) > 0xa0) {
$tmpstr .= substr($str, $i, 2)
$i++;
} else
$tmpstr .= substr($str, $i, 1)
}
return $tmpstr; 🎜>}
방법 2, PHP는 잘못된 문자 없이 중국어 문자열을 가로채는 방법을 구현합니다.
function gbsubstr($string, $start, $length) {
if(strlen($string)>$length ){
$str=null
$len=$start+$length; ($i=$start;$i<$len;$i++) {
if(ord(substr($string,$i,1))>0xa0){
$ str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i, 1)
}
}
return $str.'...';
}else{
return $ 문자열
}
}
?>