我怎么知道字符串是mb字符串?所以我们使用mb_strlen而不是strlen?
答案 0 :(得分:7)
您需要始终知道字符串的编码方式,以及字符串是否为多字节编码。毕竟,您需要将字符串的编码作为第二个参数传递给mb_strlen()
以获得可靠的结果,对吗?
传入数据的编码将始终以某种方式定义 - 处理表单数据时页面的编码;处理数据库数据时的数据库连接和表的编码;等等。你的工作是以一种你总是知道编码在哪里的方式构建流程。
唯一的例外是当您处理未正确声明其内容编码的任意第三方数据时。然后(并且只有那时)可以使用像mb-detect-encoding()
和同事那样的嗅探功能。请记住,这些函数非常容易出错,并且只能让您有一个有根据的猜测猜测字符串的编码,而不是硬信息。
答案 1 :(得分:2)
没有。字符串是一个字符串。无法判断它是否包含多个字节字符。
您可以使用类似mb_detect_encoding()的内容进行猜测,但您的里程可能因字符集和编码而异。例如,UTF-8具有非常独特的模式,您将获得非常好的结果。但其他编码如GB2312确实很难被发现。
如果您正在设计新的协议或系统,最好保留编码信息。
答案 2 :(得分:2)
比较strlen和mb_strlen结果,如果它们不匹配,则该字符串包含多字节字符。
答案 3 :(得分:1)
是不应该使用mb_check_encoding
或mb_detect_encoding
?