【问题标题】:Counting special characters with PHP用 PHP 计算特殊字符
【发布时间】:2014-04-09 17:12:04
【问题描述】:

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

有没有简单的方法来计算所有东西而无需做任何繁重的工作?

【问题讨论】:

  • php.net/mb_strlen 用于多字节字符串
  • 如果你想知道一个字符串在屏幕上的长度,那很难。 mb_strlen() 只会计算“字符”,但有些字符不显示,修改前面字符的字符(至少在 Unicode 中)等等。

标签: php strlen


【解决方案1】:

如果您的输入是 UTF-8 编码并且您想计算 Unicode graphemes,您可以这样做:

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

Here 是一些解释。 Unicode 字素是“字符”(Unicode 代码点),包括可以跟随它们的“combining marks”。

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_*() functions(当然,前提是您安装了intl PECL extension)。

【讨论】:

    【解决方案2】:

    strlen 和 mb_strlen 对我来说都很好。

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

    希望对你有所帮助。

    【讨论】:

    • mb_stren 确实适用于我给出的示例。但是如果有人输入小于号“
    【解决方案3】:

    给你。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多