如何在PHP中获取字符数?

5

mb_strlen只返回字节数,而这不是我想要的。

它应该适用于多字节字符。


http://docs.php.net/manual/en/function.mb-strlen.php - SilentGhost
mb_substr 给出一个多字节字符串中的子字符串 - 这与字符串的长度无关。使用其他人建议的 mb_strlen - Stefan Gehrig
字节大小 -> strlen() 例如:strlen('a₹') -> 4。字符计数 -> mb_strlen() 例如:mb_strlen('a₹', "UTF-8") -> 2。注意:mb_strlen() 在 PHP 中默认是禁用的。 - Sathvik
7个回答

13
mb_strlen($text, "UTF-8");

11

2
这是正确的,也许PHP没有将你的字符串识别为多字节字符串?尝试使用类似以下的代码:mb_strlen($your_multibyte_string,$encoding),其中编码应该是像"UTF-8"或"UTF-16"这样的东西。 - jigfox
你如何使用 mb_strlen 函数,并且你要测试的字符串是使用什么编码的? - Arkh


2

strlen():返回字符串中的字节数,而不是字符数。

$name = "Perú"; // With accent mark
echo strlen($name); // Display 5, because "ú" require 2 bytes.

$name = "Peru"; // Without accent mark
echo strlen($name); // Display 4

mb_strlen():返回具有字符编码的字符串中的字符数。多字节字符计为1。

$name = "Perú"; // With accent mark
echo mb_strlen($name); // Display 4, because "ú" is counted as 1.

$name = "Peru"; // Without accent mark
echo mb_strlen($name); // Display 4

iconv_strlen():返回字符串的字符数,以整数形式表示。

$name = "Perú"; // With accent mark
echo iconv_strlen($name); // Display 4.

$name = "Peru"; // Without accent mark
echo iconv_strlen($name); // Display 4

0

mb_strlen用于测量被测量的字符串长度。

<?php
$str = 'abcdef';
echo strlen($str); // 6

$str = ' ab cd ';
echo strlen($str); // 7
?>

直接从文档中获取。


0
如果您正在使用UTF-8编码,请遍历字符串中的所有字节,并计算第八位未设置的字符数。
此解决方案不需要使用mb扩展。

0

字符 vs. 字节。为什么它会按预期工作?您能在回答中详细说明吗?(但是不要包括“编辑:”,“更新:”或类似内容 - 答案应该看起来像今天编写的。) - Peter Mortensen
好的,RandyMorris 似乎已经离开了。还有其他人可以加入讨论吗? - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接