在PHP的mbstring.func_overload上查找字符串中的字节

时间:2009-11-08 17:14:26

标签: php character-encoding multibyte

我在PHP中配置了mbstring.func_overload = 7,因此所有单字节字符串函数都映射到它们的多字节等价物。但有时我仍然需要将字符串视为字节数组;例如,在计算其大小或进行加密时。

这里最好的方法是什么?我可以只使用多字节函数并将它们传递给单字节编码,即使这实际上不是字符串的编码方式吗?例如:

mb_substr($utf8str, 0, 1, "latin1");
mb_strlen($utf8str, "latin1");

编辑:我注意到在查看PHP的来源时,他们将原始函数重命名为mb_orig_X,就像在mb_orig_strlen中一样。可能不安全使用,因为它们没有记录,但很有趣。

1 个答案:

答案 0 :(得分:1)

我认为如果你需要使用原始函数,你不应该重写这些函数(即,如果你真的需要使用二进制字符串),这是一个非常肮脏的解决方案。这迫使你为之前做出的选择做出更加肮脏的解决方法。它可能会破坏你正在使用的库,而你却没有意识到这一点(但PHP团队不断发明越来越多的愚蠢功能)。

但如果你必须保持这种方式,你应该:

  1. 使用与ASCII类似的语言encoding(不适用于口译员,但适用于那些阅读代码的人 - 即使是2年后的那些人。)和
  2. 记录你为什么要彻底地做到这一点,因为每个人都会对这段代码感到困惑。