使用PHP计算特殊字符

时间:2014-04-09 17:12:05

标签: php strlen

我想计算网站上文本字段中的字符数。文本字段接受来自用户的任何类型的输入,包括ascii art和其他特殊字符。如果用户输入普通字符,我可以使用strlen($ message)返回值,但如果用户使用特殊字符(例如Â或©),则计数不正确。

是否有简单的方法可以计算所有内容而无需进行任何繁重的工作?

3 个答案:

答案 0 :(得分:5)

如果您的输入是UTF-8编码并且您想要计算Unicode 字素,则可以执行以下操作:

$count = preg_match_all('/\X/u', $text);

Here是一些解释。 Unicode字素是"字符" (Unicode代码点),包括" combining marks"可以跟着他们。

mb_strlen($text, 'UTF-8')会将组合标记计为单独的字符。

因为,根据您的评论判断,您的输入可能会将某些字符转换为等效的HTML实体,您应首先执行html_entity_decode()

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

答案 1 :(得分:0)

strlen& mb_strlen对我来说很好。

输入的特殊字符可能不会显示(Unicode)。所以尝试哪些是不可读的字符。

希望这会对你有所帮助。

答案 2 :(得分:0)

你走了。

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

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