【问题标题】:Is there any function to find the Actual length of a string returned by filter_var() function?是否有任何函数可以找到 filter_var() 函数返回的字符串的实际长度?
【发布时间】:2020-08-03 04:22:29
【问题描述】:

我正在尝试使用 strlen() 和 mb_str() 函数查找 filter_var() 函数返回的字符串的实际长度。

代码:

<?php
$name = "Carl O'Johnson";
echo "The actual length of the string: " . strlen($name) . "<br>";
$name = filter_var($name, FILTER_SANITIZE_STRING);
echo "The length of the string using strlen() after filter_var() function: " . strlen($name) . "<br>";
echo "The length of the string using mb_strlen() after filter_var() function: " . mb_strlen($name) . "<br>";
?>

输出:

字符串的实际长度:14 在 filter_var() 函数之后使用 strlen() 的字符串长度:18 filter_var()函数后使用mb_strlen()的字符串长度:18

filter_var 函数将 ' 编码为 #39;。哪个函数会返回 filter_var() 函数返回的字符串的实际长度?

【问题讨论】:

    标签: php string strlen filter-var


    【解决方案1】:

    通过设置FILTER_FLAG_NO_ENCODE_QUOTES 选项,您可以在清理字符串时不使用引号(如果您觉得这样的话):

    $name = filter_var($name, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);
    $length = mb_strlen($name);  // 14
    

    或者您可以在计算长度之前将生成的 HTML 实体转换回来,使用 html_entity_decode 并传递 ENT_QUOTES 标志:

    $name = filter_var($name, FILTER_SANITIZE_STRING);
    $length = mb_strlen(html_entity_decode($name, ENT_QUOTES, 'UTF-8'));  // 14
    

    请注意,在这种情况下,strlen 将产生相同的输出。

    【讨论】:

      猜你喜欢
      • 2010-11-23
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2016-05-12
      相关资源
      最近更新 更多