我怎么知道字符串是 mb 字符串?所以我们使用 mb_strlen 而不是 strlen ?
4 回答
您需要始终知道字符串的编码是什么,以及它是否是多字节的。毕竟,您需要将字符串的编码作为第二个参数传递mb_strlen()
才能获得可靠的结果,对吧?
传入数据的编码总是会以某种方式定义——处理表单数据时页面的编码;处理数据库数据时的数据库连接和表的编码;等等。你的工作是以一种你总是知道什么是什么编码在哪里的方式来构建流程。
唯一的例外是当您处理未正确声明其内容编码的任意第三方数据时。mb-detect-encoding()
那时(而且只有那时)可以使用像和同事这样的嗅探功能。请记住,这些函数非常容易出错,并且只能让您有根据地猜测字符串的编码方式,而不是可靠的信息。
不,字符串就是字符串。无法判断它是否包含多个字节字符。
您可以使用 mb_detect_encoding() 之类的东西进行猜测,但您的里程可能会因字符集和编码而异。例如,UTF-8 有一个非常独特的模式,你会得到非常好的结果。但是像 GB2312 这样的其他编码真的很难检测到。
如果您正在设计新的协议或系统,最好保留编码信息。
Compare the strlen and the mb_strlen results, and if they do not match, the string contains multibyte characters.
不应该mb_check_encoding
或不mb_detect_encoding
应该用于那个吗?