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