使用PHP计算特殊字符数量

3
我想要在我的网站上计算文本框中字符的数量。文本框接受用户输入的任何类型,包括ASCII艺术和其他特殊字符。如果用户输入普通字符,我可以使用strlen($message)来返回值,但是如果用户使用特殊字符(例如Â或©),计数将不正确。
有没有简单的方法来计算所有内容而不需要做任何繁重的工作?

6
PHP官方文档中的mb_strlen()函数是用于获取多字节字符串的长度。该函数可以正确计算使用多个字节表示的Unicode字符的长度。 - Marc B
如果你想知道一个字符串在屏幕上的长度,那就很难了。mb_strlen() 只会计算“字符”,但是有些字符不会显示,有些字符会修改前面的字符(至少在 Unicode 中是这样),等等。 - Walter Tross
3个回答

10
如果您的输入是UTF-8编码,并且您想要计算Unicode图形符号,则可以执行以下操作:
$count = preg_match_all('/\X/u', $text);

这里有一些解释。Unicode图形字符是“字符”(Unicode代码点),包括可以跟随它们的“组合标记”。

mb_strlen($text, 'UTF-8')会将组合标记计算为单独的字符(而strlen($text)会给出总字节数)。

由于根据你的评论,你的输入可能已经将某些字符转换为它们的HTML实体等效项,因此你应该首先执行html_entity_decode()

$count = preg_match_all('/\X/u', html_entity_decode($text, ENT_QUOTES, 'UTF-8'));

更新

现在,intl PECL扩展提供了grapheme_strlen()和其他grapheme_*()函数(当然,只有安装了intl PECL扩展才能使用)。


0

给你。

function countumlauts($str) {
    return strlen($str) - iconv_strlen($str);
}

它的工作原理:特殊字符使用多个字节。 strlen 计算字节数,而 iconv_strlen 则计算字符数。


0

对于我来说,strlen和mb_strlen都能正常工作。

可能是输入的特殊字符无法显示(Unicode)。因此,请尝试哪些字符是不可读的。

希望这可以帮到你。


mb_stren对我所提供的示例有效。但是,如果有人键入小于号“<”,它会被WordPress转换为“<”并计为4个字符。由于我相信这是WordPress转换的唯一字符,因此我认为我可以计算小于号符号的数量(n),并从总字符数中减去4n。 - user1399181

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