【问题标题】:using strlen in php for form validation在 php 中使用 strlen 进行表单验证
【发布时间】:2013-04-24 14:05:31
【问题描述】:

我有以下验证:

    if (empty($errors) === true) { 
        if (strlen($_POST['Description']) > 250) { //strlen counts the number of bytes
            $errors[] = 'Your description must be less than 250 characters long';
        }
    }

但如果用户输入的描述长度超过 30 个字符,则始终会显示此错误。我读过 strlen 返回字节数而不是字符串中的字符数。我试过 mb_strlen 来获取字符长度,但这也不起作用。我觉得我在做一些明显很愚蠢的事情,如果可以的话,请帮忙。

【问题讨论】:

  • 输入语言是什么?你试过 mb_stren 吗?
  • 来自 php.net/mb_strlen 如果您发现自己没有 mb 字符串函数并且无法轻松更改它,则 mb_strlen 的 utf8 字符的快速黑客替代方法是使用打开 utf8 的 PCRE 正则表达式. $strlen = preg_match_all("/.{1}/us",$utf8string,$dummy);这基本上是一个丑陋的 hack,它计算所有单个字符匹配,我希望它在大字符串上会非常缓慢。

标签: php string validation strlen


【解决方案1】:

老实说,我不知道任何使用 8 个字节的字符编码。

我认为您的“$_POST['Description']”可能不仅仅包含您想要的数据。

做一个

 var_dump($_POST['Description'])

看看它显示了什么。

附注:

if (strlen(trim($_POST['Description'])) > 250)

防止空格导致验证失败。

另请注意,您必须为 mb_strlen 指定编码,因为发送的字符编码可能与内部编码不同。

【讨论】:

  • 当我做var_dump($_POST['Description']) 时,我得到了发布的描述,最后它说(length=1584)...
  • 当你把
     标签放在它周围时,你看到了什么奇怪的东西还是还可以?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 2019-04-01
  • 2010-12-16
相关资源
最近更新 更多