增加对使用PHP字符串函数验证字符串的理解

use*_*264 0 php

我刚开始尝试用PHP验证数据,我试图更好地理解这个概念.我期望将字符串作为参数传递给$data参数,test_input()以便通过以下PHP函数格式化函数.

  1. trim() 从字符串末尾删除空格
  2. stripslashes() 返回带有反斜杠的字符串
  3. htmlspecialchars() 将特殊字符转换为HTML实体

问题是我在函数末尾回显的字符串没有以我想要的方式格式化.事实上,当我在我的服务器上运行此代码时,它看起来完全一样 - 没有删除空格,反斜杠没有被删除,也没有特殊字符转换为HTML实体.

我的问题是,我是以错误的方式解决了这个问题吗?我是否应该$santised_input使用每个函数创建在3个单独行上调用的变量trim(),stripslashes()并且htmlspecialchars()

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

我想要实现的是"$santised_input"$data参数传递给我的test_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;"

?>
Run Code Online (Sandbox Code Playgroud)

Pud*_*601 5

您正在对原始$data变量执行每个字符串函数,并覆盖$santised_input每次的值.输出与简单地运行最后一个字符串函数和前两个函数都没有区别.

要解决,在$santised_input变量上执行后面的函数;

function test_input($data) {
   $santised_input = trim($data);
   $santised_input = stripslashes($santised_input);
   $santised_input = htmlspecialchars($santised_input);
   echo $santised_input;
}
Run Code Online (Sandbox Code Playgroud)