有一些遗留代码,我应该将其从
iso-8859-2
转换为 UTF-8
。问题之一是 strlen
函数的广泛使用。我首先想到将所有出现的 strlen
替换为 mb_strlen
。
但是,我的一位同事说这是一个错误。我知道这两个函数之间的区别 - 如果字符串中存在重音字符,
strlen
将返回它实际需要的字节数,而mb_strlen
将返回字符数。
现在,一位同事说,也许,只是也许在某个地方存在一种情况,返回需要大约是字符串中的字节数,但他无法给我任何这种情况的例子。
整个代码中大约有 900 个
strlen
出现,分析每一个出现的情况需要几天时间。
问题是 - 当某人需要字符串中的字节数而不是字符数时,潜在的情况是什么?
我想到了几种情况:
我们还应该注意到 strlen 更快。在一个简单的测试中,我对一个包含 20 个字符和 1000000 次重复的字符串进行了测试:
strlen : 0.044954061508179
mb_strlen : 1.2507030963898
因此,如果我们的字符串是 ISO(而不是 utf-8),我认为 strlen 是更好的选择。