提高对使用PHP字符串函数验证字符串的理解
我刚刚开始尝试用PHP验证数据,我正试图更好地理解这个概念。我希望字符串作为参数传递给提高对使用PHP字符串函数验证字符串的理解,php,Php,我刚刚开始尝试用PHP验证数据,我正试图更好地理解这个概念。我希望字符串作为参数传递给test\u input()函数的$data参数,并由以下PHP函数格式化 trim()删除字符串末尾的空白 stripslashes()返回一个去掉反斜杠的字符串 htmlspecialchars()将特殊字符转换为HTML实体 问题是,我在函数末尾回显的字符串根本没有按照我所希望的方式进行格式化。事实上,当我在我的服务器上运行这段代码时,它看起来完全一样——没有删除空白,没有删除反斜杠,也没有转换为HTML
test\u input()
函数的$data
参数,并由以下PHP函数格式化
trim()
删除字符串末尾的空白stripslashes()
返回一个去掉反斜杠的字符串htmlspecialchars()
将特殊字符转换为HTML实体$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 ""><script>alert('hacked')</script>"
?>
编辑:对不起,误读了问题。你实际上可以做到:
$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,因为此变量可以存储输出,然后每次都在其上构建?是的,上一个函数的输出每次都在下一个函数中重复使用,以获得最终结果=]再次感谢,您今天真的帮了我大忙。