为什么有人想使用 strlen 而不是 mb_strlen

问题描述 投票:0回答:2

有一些遗留代码,我应该将其从

iso-8859-2
转换为
UTF-8
。问题之一是
strlen
函数的广泛使用。我首先想到将所有出现的
strlen
替换为
mb_strlen

但是,我的一位同事说这是一个错误。我知道这两个函数之间的区别 - 如果字符串中存在重音字符,

strlen
将返回它实际需要的字节数,而
mb_strlen
将返回字符数。

现在,一位同事说,也许,只是也许在某个地方存在一种情况,返回需要大约是字符串中的字节数,但他无法给我任何这种情况的例子。

整个代码中大约有 900 个

strlen
出现,分析每一个出现的情况需要几天时间。

问题是 - 当某人需要字符串中的字节数而不是字符数时,潜在的情况是什么?

php utf-8
2个回答
6
投票

我想到了几种情况:

  • 将字符串存储在文件或数据库中
  • 将字符串写入套接字以通过网络发送
  • 调用需要字节长度的旧 API 或 COM 方法

0
投票

我们还应该注意到 strlen 更快。在一个简单的测试中,我对一个包含 20 个字符和 1000000 次重复的字符串进行了测试:

strlen    : 0.044954061508179
mb_strlen : 1.2507030963898

因此,如果我们的字符串是 ISO(而不是 utf-8),我认为 strlen 是更好的选择。

© www.soinside.com 2019 - 2024. All rights reserved.