PHP中使用strlen和mb_strlen, iconv_strlen的区别

在PHP中,我们常常需要处理字符串长度。比如说,有些情况下需要把过长的字符串截短一点,然后存入数据库或者文件。

今天的程序中,出现了一个bug,很简单的问题,postgresql说无法存储字符串,说是无效的UTF-8字符。很好奇,数据库到程序包括页面都是UTF-8,为什么会出现这个问题。仔细读了程序,原来有一个地方是使用的strlen获取字符串长度,而字符串是中文。根据这个strlen获取了长度后,又继续通过substr进行了字符串截取。这样肯定会有问题,因为里面的字符都是中文的,至少应该处理一下.

那么,可以这么讲,在php的中文编程中,基本上可以先不使用strlen这个方法了,直接使用mb_strlen不可以了。因为mb_strlen能够处理多语言字符,当然你要安装php-mbstring.

在使用mb_strlen的时候,如果不确定运行时是否为utf-8,可以用 mb_internal_encoding(“UTF-8″);来处理。不过用mb_strlen第二个参加添加utf-8也可以。

对于iconv_strlen,我用得不多,不过我觉得这个方法和mb_strlen是一样的,只要设置的字符集没问题。

反正,别用strlen了,除非是判断纯拉丁字符。