php > $s="Hallo";
php > echo mb_strlen($s,"utf8");
2
utf8 gibt 2 zurück, ich verstehe
php > echo mb_strlen($s,"gb2312");
4
Hier gibt 4 zurück, ich verstehe auch
php > echo mb_strlen($s,"gbk");
3
Hier I Verstehst du nicht?
php > $s="Hallo";
php > echo mb_strlen($s,"utf8");
2
utf8 gibt 2 zurück, ich verstehe
php > echo mb_strlen($s,"gb2312");
4
Hier gibt 4 zurück, ich verstehe auch
php > echo mb_strlen($s,"gbk");
3
Hier I Verstehst du nicht?
Da $s UTF8-kodiert ist, können Sie seine Länge durch GBK-Kodierung erhalten, ohne es in GBK zu konvertieren.
UTF8-codiert 你好
ist 浣犲ソ
auf GBK, daher beträgt seine Länge 3.
Das sollten Sie tun:
<code>$a = mb_strlen(iconv( 'utf-8','gbk', $s), 'gbk'); $b = mb_strlen(iconv( 'utf-8','gb2312', $s), 'gb2312'); </code>
Das heißt, GB2312 ist auch falsch.
mb_strlen ist die Anzahl der zurückgegebenen Zeichen, daher ist es richtig, nur 2 zurückzugeben. Ich weiß nicht, wie Sie die beiden Fälle von 4 und 3 verstehen?
Aber wenn $s = "你好"
verwendet wird, speichert $s
eine UTF8-codierte Zeichenfolge (entsprechend Ihrer Quelldateicodierung). Wenn Sie diese codierten Daten mit GBK oder GB2312 decodieren, erhalten Sie möglicherweise verstümmelte Zeichen sollte der Länge verstümmelter Zeichen entsprechen.