Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么有人想用strlen而不是mbu strlen_Php_Utf 8 - Fatal编程技术网

Php 为什么有人想用strlen而不是mbu strlen

Php 为什么有人想用strlen而不是mbu strlen,php,utf-8,Php,Utf 8,有一些遗留代码,我应该将其从iso-8859-2转换为UTF-8。其中一个问题是strlen函数的广泛使用。我首先想到的是,我将把所有出现的strlen替换为mb_strlen 然而,我的一位同事说,这将是一个错误。我知道这两个函数之间的区别——如果字符串中有重音字符,strlen将返回实际占用的字节数,而mb_strlen将返回字符数 现在,一位同事说,可能,只是可能在某个地方有一种情况,返回值应该是字符串中的字节数,但他不能给我任何这种情况的例子 在整个代码中,大约有900个strlen事件

有一些遗留代码,我应该将其从
iso-8859-2
转换为
UTF-8
。其中一个问题是strlen函数的广泛使用。我首先想到的是,我将把所有出现的
strlen
替换为
mb_strlen

然而,我的一位同事说,这将是一个错误。我知道这两个函数之间的区别——如果字符串中有重音字符,
strlen
将返回实际占用的字节数,而
mb_strlen
将返回字符数

现在,一位同事说,可能,只是可能在某个地方有一种情况,返回值应该是字符串中的字节数,但他不能给我任何这种情况的例子

在整个代码中,大约有900个strlen事件,分析每个事件需要几天的时间


问题是-当某人需要字符串中的字节数而不是字符数时,可能出现的情况是什么

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

看一看,当您试图使用strlen获取字节计数时,您唯一需要更改的是。当您想查看字符串放入容器(如db字段或固定长度文件)时会占用多少空间时,字节计数非常有用。如果您试图报告准确的内容长度标题,这一点也很重要,谢谢,但是,你知道在代码中寻找什么来检测这种情况吗?通常需要考虑如何使用StruL/MnStruLLN的结果。它是传递给需要多个字符的函数,还是传递给需要多个字节的函数?除此之外,很难找到一个通用的规则,通常像这样的边缘情况应该被单元测试所覆盖。