我刚开始尝试用PHP验证数据,我试图更好地理解这个概念.我期望将字符串作为参数传递给$data参数,test_input()以便通过以下PHP函数格式化函数.
trim() 从字符串末尾删除空格stripslashes() 返回带有反斜杠的字符串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 ""><script>alert('hacked')</script>"
?>
Run Code Online (Sandbox Code Playgroud)
您正在对原始$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)