PHP에서 substr() 함수가 중국어 문자열을 가로채면 문자가 깨져서 나타날 수 있습니다. 이는 중국어와 서양 문자에서 1바이트가 차지하는 바이트 수가 다르고 substr의 길이 매개 변수를 기반으로 하기 때문입니다. 문자의 경우, GB2312 인코딩에서는 한자 하나가 2바이트를 차지하고, UTF-8 인코딩에서는 한자 하나가 2~3바이트를 차지하고, 영어나 반각 구두점이 1바이트를 차지합니다. .1바이트.
한자를 가로채기 위해 PHP 함수 substr을 직접 사용하면 문자가 깨질 수 있습니다. 주된 이유는 substr이 한자를 강제로 반으로 "볼" 수 있기 때문입니다. 해결 방법:
1 문자가 왜곡되는 것을 방지하려면 mbstring 확장 라이브러리의 mb_substr 차단을 사용하세요.
2. 차단 기능을 직접 작성하지만 mbstring 확장 라이브러리를 사용하는 것만큼 효율성이 높지 않습니다.
3. 단지 가로채는 문자열을 출력하는 것이라면 substr($str, 0, 30).chr(0)과 같이 구현할 수 있습니다.
substr()
函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()
/mb_strcut
这个函数,mb_substr()/mb_strcut的用法与substr()相似,只是在mb_substr()/mb_strcut最后要加入多一个参数,以设定字符串的编码,但是一般的服务器都没打开php_mbstring.dll
, php.ini에서 php_mbstring.dll을 열어야 합니다.
예:
<?php echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8'); ?> 输出:这样一来我的字 <?php echo mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8'); ?>
출력: 다음과 같습니다.
위의 예에서 볼 수 있듯이 mb_substr은 문자를 단어로 분할하는 반면 mb_strcut은 문자를 바이트로 분할하지만 둘 다 반 문자 현상을 생성하지 않습니다.
PHP를 사용하여 잘못된 문자 없이 중국어 텍스트 문자열을 가로채는 방법
function GBsubstr($string, $start, $length) { if(strlen($string)>$length){ $str=null; $len=$start+$length; for($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 $string; } }
깨진 문자 없이 중국어 텍스트 문자열을 가로채는 방법 - utf-8에 적합
function substr_text($str, $start=0, $length, $charset="utf-8", $suffix="") { if(function_exists("mb_substr")){ return mb_substr($str, $start, $length, $charset).$suffix; } elseif(function_exists('iconv_substr')){ return iconv_substr($str,$start,$length,$charset).$suffix; } $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/"; $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/"; $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/"; $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/"; preg_match_all($re[$charset], $str, $match); $slice = join("",array_slice($match[0], $start, $length)); return $slice.$suffix; }
권장 튜토리얼: PHP 비디오 튜토리얼
위 내용은 PHP는 잘못된 문자 없이 한자를 자릅니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!