>  기사  >  백엔드 개발  >  gbk 인코딩의 반환 결과가 3인 이유는 무엇입니까?

gbk 인코딩의 반환 결과가 3인 이유는 무엇입니까?

WBOY
WBOY원래의
2016-08-22 11:45:371232검색

php > $s="Hello";
php > echo mb_strlen($s,"utf8");
2
utf8은 2를 반환합니다.
php > mb_strlen($s,"gb2312");
4
여기서 4가 반환됩니다. 저도 이해합니다
php > echo mb_strlen($s,"gbk");
3
여기서 I 이해가 안 가?

답글 내용:

php > $s="Hello";
php > echo mb_strlen($s,"utf8");
2
utf8은 2를 반환합니다.
php > mb_strlen($s,"gb2312");
4
여기서 4가 반환됩니다. 저도 이해합니다
php > echo mb_strlen($s,"gbk");
3
여기서 I 이해가 안 가?

$s는 UTF8로 인코딩되어 있으므로 GBK로 변환하지 않고도 GBK 인코딩을 통해 길이를 얻을 수 있습니다.

UTF8로 인코딩된 你好은 GBK에서 浣犲ソ이므로 길이는 3입니다.

해야 할 일은 다음과 같습니다.

<code>$a = mb_strlen(iconv( 'utf-8','gbk', $s), 'gbk');
$b = mb_strlen(iconv( 'utf-8','gb2312', $s), 'gb2312');
</code>

즉, GB2312도 틀렸습니다.

mb_strlen은 반환되는 문자 수이므로 2만 반환하는 것이 맞습니다. 4와 3의 두 경우를 어떻게 이해하셨는지 모르겠네요.

그러나 $s = "你好"을 사용하면 $s은 소스 파일 인코딩에 따라 UTF8로 인코딩된 문자열을 저장합니다. GBK 또는 GB2312를 사용하여 이 인코딩된 데이터를 디코딩하면 문자 4와 3이 깨질 수 있습니다. 왜곡된 문자의 길이여야 합니다.

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