2

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

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

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

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

4

1 回答 1

1

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

但如果你必须保持这种状态,你应该:

  1. 使用与语言无关的编码,例如ASCII(不是针对解释器,而是针对那些阅读您的代码的人 - 即使那是您在 2 年内。)和
  2. 记录你为什么要彻底这样做,因为它会让每个查看那段代码的人感到非常困惑。
于 2009-11-08T17:38:59.320 回答