strlen mb_strlen iconv_strlen区别

strlen应该不用多讲了,返回字符串长度,多字节字符在不同编码下会有不同的结果,比如中文在utf8编码下可能返回3,而在ascII编码下可能返回2。

mb_strlen和iconv_strlen看起来好像没什么区别,都是返回对应编码字符的长度,都有第二个默认参数charset,实际还是有区别的。

首先,mb_strlen需要mbstring支持,没开启这个扩展肯定是不能用的。而iconv_strlen不依赖mbstring。

其次,iconv_strlen在指定第二个参数charset的情况下,要求被计算的字符串也必须是相同的编码,否则返回false,在不指定charset情况下,使用默认字符集,其计算结果依赖于当前字符集,比如ascII编码下,返回值和strlen同。

结论是,在开启mbstring扩展的前提下,计算多字节字符串长度,优先使用mb_strlen,并指定第二个参数charset。

非要使用iconv_strlen,要确保第一个参数字符集和第二个参数保持一致。