Php 是否可以将$\u POST视为单引号而不是双引号?
我有一个名为Php 是否可以将$\u POST视为单引号而不是双引号?,php,validation,security,post,Php,Validation,Security,Post,我有一个名为password的$\u POST字段,它保存了从HTML表单发布的密码。前两项检查是: if(isset($_POST['password'])){ if(strlen($_POST['password'])>=8){ 问题是,如果帖子包含一个美元符号($),那么它后面的所有内容(包括美元符号)都将被忽略。我可以看到这一点,因为如果发布了诸如odte$tPa55word之类的内容,则strlen仅返回4。我认为这是因为$\u POST['password']将内容视为双引号
password
的$\u POST
字段,它保存了从HTML表单发布的密码。前两项检查是:
if(isset($_POST['password'])){
if(strlen($_POST['password'])>=8){
问题是,如果帖子包含一个美元符号($)
,那么它后面的所有内容(包括美元符号)都将被忽略。我可以看到这一点,因为如果发布了诸如odte$tPa55word
之类的内容,则strlen
仅返回4
。我认为这是因为$\u POST['password']
将内容视为双引号字符串(“”)
,而不是单引号(“”)
,这意味着$后的所有内容都被解释为变量
我找到了一个解决方案,就是addcslashes()
,但问题是,我不知道接下来的preg\u match
是否会忽略这些斜杠,或者它是否会响应这些斜杠
问题是,如果有某种方法来处理$\u POST
变量,如单引号字符串rater,然后双引号sting,以使输入更加安全,如果这是不可能的,那么我应该使用什么类型的转义语句来避免这种情况发生
编辑
完整代码:
<?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');
}
?>
这将返回:
Err1: 4
并不是说,输入值被视为字符串,它们不会神奇地变成php变量。因为你试图调试错误。显示你所有的代码。告诉你的;p使用curl-v-d'password=odte$tPa55word'-w“\n”-X POSThttp://localhost:80/test.php相反。cmd也将像php一样插入。。
Err1: 4