Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提高对使用PHP字符串函数验证字符串的理解_Php - Fatal编程技术网

提高对使用PHP字符串函数验证字符串的理解

提高对使用PHP字符串函数验证字符串的理解,php,Php,我刚刚开始尝试用PHP验证数据,我正试图更好地理解这个概念。我希望字符串作为参数传递给test\u input()函数的$data参数,并由以下PHP函数格式化 trim()删除字符串末尾的空白 stripslashes()返回一个去掉反斜杠的字符串 htmlspecialchars()将特殊字符转换为HTML实体 问题是,我在函数末尾回显的字符串根本没有按照我所希望的方式进行格式化。事实上,当我在我的服务器上运行这段代码时,它看起来完全一样——没有删除空白,没有删除反斜杠,也没有转换为HTML

我刚刚开始尝试用PHP验证数据,我正试图更好地理解这个概念。我希望字符串作为参数传递给
test\u input()
函数的
$data
参数,并由以下PHP函数格式化

  • trim()
    删除字符串末尾的空白
  • stripslashes()
    返回一个去掉反斜杠的字符串
  • htmlspecialchars()
    将特殊字符转换为HTML实体
  • 问题是,我在函数末尾回显的字符串根本没有按照我所希望的方式进行格式化。事实上,当我在我的服务器上运行这段代码时,它看起来完全一样——没有删除空白,没有删除反斜杠,也没有转换为HTML实体的特殊字符

    我的问题是,我是否采取了错误的方法?我是否应该在3行单独创建名为
    $santised\u input
    的变量,每个变量分别包含
    trim()
    stripslashes()
    htmlspecialchars()

    根据我的理解,每次在新的代码行上重新创建
    $santised_input
    变量时,我肯定会覆盖该变量的值。因此,将永远不会执行
    trim()
    stripslashes()
    字符串函数

    我试图实现的是,当
    $data
    参数传递给我的
    test\u input()
    函数时,使用
    “$santised\u input”
    变量运行所有这些PHP字符串函数。换句话说,这些字符串函数可以链接在一起,这样我只需要创建一次
    $santised_input

    <?php
    
    function test_input($data) {
       $santised_input = trim($data);
       $santised_input = stripslashes($data);
       $santised_input = htmlspecialchars($data);
       echo $santised_input;
    }
    
    test_input("%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E\     ");
    
    //Does not output desired result "&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;"
    
    ?>
    

    编辑:对不起,误读了问题。你实际上可以做到:

    $sanitized_input=htmlspecialchars(stripslashes(trim($data))


    我想这应该可以解决问题。

    编辑:对不起,误读了这个问题。你实际上可以做到:

    $sanitized_input=htmlspecialchars(stripslashes(trim($data))


    我认为,这就应该做到了。

    您正在对原始的
    $data
    变量执行每个字符串函数,并且每次都覆盖
    $santized\u输入的值。输出与只运行最后一个字符串函数以及前两个函数没有什么不同

    要解决此问题,请对
    $santised\u输入变量执行后面的函数

    function test_input($data) {
       $santised_input = trim($data);
       $santised_input = stripslashes($santised_input);
       $santised_input = htmlspecialchars($santised_input);
       echo $santised_input;
    }
    

    您正在对原始
    $data
    变量执行每个字符串函数,并每次覆盖
    $santized\u input
    的值。输出与只运行最后一个字符串函数以及前两个函数没有什么不同

    要解决此问题,请对
    $santised\u输入变量执行后面的函数

    function test_input($data) {
       $santised_input = trim($data);
       $santised_input = stripslashes($santised_input);
       $santised_input = htmlspecialchars($santised_input);
       echo $santised_input;
    }
    

    我从不相信这个函数,我会使用preg_replace处理正则表达式


    我从不相信这个函数,我会使用preg\u replace处理regex


    您还应该注意PHP5中添加的<代码>过滤器变量

    字符串可以按如下方式进行消毒

    $sanitised = filter_var($data, FILTER_SANITIZE_STRING);
    
    例如,您可以使用各种选项对其进行消毒

    $sanitised = filter_var($data, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);  
    

    这些函数对于通过
    FILTER\u SANITIZE\u URL
    FILTER\u SANITIZE\u EMAIL
    验证和清理URL和电子邮件特别有用。您还应该注意PHP5中添加的<代码>过滤器变量

    字符串可以按如下方式进行消毒

    $sanitised = filter_var($data, FILTER_SANITIZE_STRING);
    
    例如,您可以使用各种选项对其进行消毒

    $sanitised = filter_var($data, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);  
    

    这些功能对于通过
    FILTER\u SANITIZE\u URL
    FILTER\u SANITIZE\u EMAIL

    验证和清理URL和电子邮件特别有用,非常感谢您对此进行清理。我能问最后一件事吗?现在我知道我正在用$data覆盖$u输入的值。在您发布的示例中,我们使用$santised_输入而不是$number,因为此变量可以存储输出,然后每次都在其上构建?是的,上一个函数的输出每次都会在下一个函数中重复使用,以获得最终结果=]再次感谢,您今天真的帮了我很大的忙。非常感谢您清除了这一问题。我能问最后一件事吗?现在我知道我正在用$data覆盖$u输入的值。在您发布的示例中,我们使用$santised_输入而不是$number,因为此变量可以存储输出,然后每次都在其上构建?是的,上一个函数的输出每次都在下一个函数中重复使用,以获得最终结果=]再次感谢,您今天真的帮了我大忙。