关于PHP中的mb字符串和普通字符串

时间:2010-06-05 14:04:52

标签: php mbstring

我怎么知道字符串是mb字符串?所以我们使用mb_strlen而不是strlen?

4 个答案:

答案 0 :(得分:7)

需要始终知道字符串的编码方式,以及字符串是否为多字节编码。毕竟,您需要将字符串的编码作为第二个参数传递给mb_strlen()以获得可靠的结果,对吗?

传入数据的编码将始终以某种方式定义 - 处理表单数据时页面的编码;处理数据库数据时的数据库连接和表的编码;等等。你的工作是以一种你总是知道编码在哪里的方式构建流程。

唯一的例外是当您处理未正确声明其内容编码的任意第三方数据时。然后(并且只有那时)可以使用像mb-detect-encoding()和同事那样的嗅探功能。请记住,这些函数非常容易出错,并且只能让您有一个有根据的猜测猜测字符串的编码,而不是硬信息。

答案 1 :(得分:2)

没有。字符串是一个字符串。无法判断它是否包含多个字节字符。

您可以使用类似mb_detect_encoding()的内容进行猜测,但您的里程可能因字符集和编码而异。例如,UTF-8具有非常独特的模式,您将获得非常好的结果。但其他编码如GB2312确实很难被发现。

如果您正在设计新的协议或系统,最好保留编码信息。

答案 2 :(得分:2)

比较strlen和mb_strlen结果,如果它们不匹配,则该字符串包含多字节字符。

答案 3 :(得分:1)

是不应该使用mb_check_encodingmb_detect_encoding