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이 깨질 수 있습니다. 왜곡된 문자의 길이여야 합니다.