我想计算网站上文本字段中的字符数。文本字段接受来自用户的任何类型的输入,包括ascii art和其他特殊字符。如果用户输入普通字符,我可以使用strlen($ message)返回值,但如果用户使用特殊字符(例如Â或©),则计数不正确。
是否有简单的方法可以计算所有内容而无需进行任何繁重的工作?
答案 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计算字符数。