我有一个名为$_POST
的{{1}}字段,其中包含从HTML表单发布的密码。它经历的前两个检查是:
password
问题在于,如果帖子包含美元符号if(isset($_POST['password'])){
if(strlen($_POST['password'])>=8){
,则忽略其后面的所有内容,包括美元符号。我可以看到这一点,因为如果发布($)
之类的内容,odte$tPa55word
只返回strlen
。我认为这是因为4
将内容视为双引号字符串$_POST['password']
而不是单引号("")
,这意味着$被解释为变量后的所有内容。
我找到了一个对('')
的解决方案,但问题是我不知道后面的addcslashes()
是否忽略这些斜线或它是否会响应它们。
问题是,是否有某种方法可以处理preg_match
变量,例如单引号字符串rater然后双引号stings以使输入更安全,如果这不可能那么我应该使用什么样的转义语句让这样的事情不会发生?
修改
完整代码:
$_POST
请求:
<?php
if(isset($_POST['password'])){
if(strlen($_POST['password'])>=8){
if($_POST['password']===$_POST['passwordConfirm']){
$password=password_hash($_POST['password'], PASSWORD_BCRYPT);
}
else{
echo('Err3');
}
}
else{
echo('Err1: '.strlen($_POST['password']));
}
}
else{
echo('Err0');
}
?>
返回:
curl -v -d "password=odte$tPa55word" -w "\n" -X POST http://localhost:8888/test.php