使用php以UTF-16BE编码接收计数字符串长度

时间:2014-12-26 20:29:59

标签: php string encoding utf-8

php脚本在HTTP GET参数中接收UTF-16BE编码的字符串。我只想计算字符串的字符

这样做我将其转换为utf-8

$ str = iconv(' utf-16be',' utf-8',$ str);

当我使用strlen($ str)时,它会返回错误的计数。我可以用

计算它
1) mb_strlen($str, 'UTF-8');

2) strlen(utf8_decode($str));

我想知道哪一个是最好的方法? 会正确统计所有角色吗?

1 个答案:

答案 0 :(得分:0)

你必须看看这些功能实际上是做什么的。

  • strlen()计算字符串的二进制长度 - 即字节数(或一个字符为一个字节的字符)。

此函数适合计算UTF-16BE编码二进制字符串中的Unicode代码点数。

相反,您可以使用

它应该返回unicode代码点的数量。

那么最好的方法是什么?这取决于你想要找到的东西。

如果您需要获取字符串的二进制长度,请选择strlen

如果您需要具有特定编码的字符串的字符数,请使用正确的编码参数mb_strlen

这已经是字符串长度了。


对于您命名的其他功能:

  • iconv()重新编码不同编码之间的字符串。这并非总是可行。
  • utf8_decode()重新编码从UTF-8到ISO-8859-1(Latin-1)的字符串,根本不适合UTF-16BE。

这两个与字符串长度无关。特别是你建议的组合:

$str = iconv('utf-16be', 'utf-8', $str);
$len = strlen(utf8_decode($str));

不稳定。不稳定意味着,它不适用于所有UTF-16BE输入。但是,您可以从UTF-16BE重新编码为UTF-8(此处为iconv)并获取UTF-8字符串长度(但不能通过utf8_decode):