php strlen 计算字节与字符 与 编码的问题


来说说我的一些观点,有错误请指出

首先一个文件只有一个编码

   
  //例1:
  
//文件utf8编码下
$str = '测试123';
echo strlen($str);//9
echo mb_strlen($str,'ISO-8859-10');//9
echo mb_strlen($str);//9

//例2:
//文件gbk编码下
$str = '测试123';
echo strlen($str);//7
echo mb_strlen($str,'ISO-8859-10');//7
echo mb_strlen($str);//7

由上面代码与其他资料得出
同一个字符串在不同编码下面的字节数有可能是不一样的
同时strlen 计算的是字符串的字节数并非字符数
strlen($str) == mb_strlen($str) == mb_strlen($str,'ISO-8859-10');

问题1:

   
  //接例1
  
echo mb_strlen($str,'gbk');
echo mb_strlen($str,'EUC-JP');
echo mb_strlen($str,'ISO-8859-10');

utf8编码下一个汉字三个字节是否意思是指 一串中文字符串仅在utf-8编码ISO-8859-10解码的情况一个汉字是三个字节 或者说我的理解有误,有另外的计算方式,麻烦帮忙指点一下

问题2:
是否一个中文字符串以一个编码方式 来编码,mb_strlen($str,'同一个编码'); 得到的结果就是字符数?不同的编码方式得到的结果则是字节?

编码 php

大珠小珠落玉盘 11 years ago

php这个语言是这样的, 字符串由字符构成, 字符即是字节 :

A string is series of characters, where a character is the same as a byte. This means that PHP only supports a 256-character set, and hence does not offer native Unicode support.

ISO-8859系列编码为单字节编码, 所以你看到用这种解码似乎是字节数相符.

UTF8中, 汉字不一定是三个字节, 翻翻码表, 我记得很多生僻字是4个字节的.

mb_strlen($str)不加第二个参数, 用internal character encoding, 我的环境中默认是iso-8859-1.

每个字符串有各自对应的编码方式, 按其来做解码或求字符数就可以了.

撿肥皂的基佬 answered 11 years ago

Your Answer