如何在PHP中解压缩字符串

如何在PHP中解压缩字符串,php,string,quotes,Php,String,Quotes,如果我引用了一个变量来阻止SQL注入: $safe_email = $db->quote($_POST['email']); 如果$\u POST['email']=abc@example.com 我做了以下工作: echo $safe_email; 我得到: "abc@example.com" 表示stripslashes函数“取消引用带引号的字符串” 但是,当我在引用字符串上使用它时: echo stripslashes($safe_email); 我仍然用引号把字符串

如果我引用了一个变量来阻止SQL注入:

$safe_email = $db->quote($_POST['email']);
如果
$\u POST['email']
=abc@example.com

我做了以下工作:

  echo $safe_email;
我得到:

 "abc@example.com" 
表示
stripslashes
函数“取消引用带引号的字符串”

但是,当我在引用字符串上使用它时:

echo stripslashes($safe_email);
我仍然用引号把字符串打印出来


这里有什么问题吗?它还在用引号打印出来

像这样的东西怎么了

filter\u var($\u POST['email'],filter\u SANITIZE\u email)

你的问题使我担心。请阅读PDO,绑定您的参数,并在夜间轻松休息。你走的这条路似乎是安全隐患之一,很可能不会有好的结局

旁注:我喜欢清理客户端和服务器端,并适当地绑定参数。也许我有点偏执,但在我看来,一盎司的预防抵得上一磅的治疗

既然你似乎对正确的方式不感兴趣


$email=str_replace(“”,“,”$email);

不一定是
quote
函数的正反面(此处假设
PDO::quote
)。它通过引号包围值,并转义字符串中的特殊字符,以根据数据库的底层驱动程序形成有效的SQL字符串文字。这可能因数据库和连接的具体情况而有所不同。您也不应该取消对字符串的引号,因为您不应该使用引号ted字符串位于SQL查询以外的任何其他位置:

sprintf('SELECT ... WHERE foo = %s', $pdo->quote($value))
没有任何理由引用该值,然后再次取消引用以在SQL查询以外的任何地方使用它。只需使用原始的
$value
而不是引用的值。当然,您应该使用带绑定参数的准备语句,而不是手动引用,因此您几乎没有任何理由这样做永远不要触摸这个功能

话虽如此,这应该涵盖大多数情况,但远不能保证总是产生正确的结果:

$unquoted = stripslashes(substr($quoted, 1, -1));

有时,您只需要删除字符串开头和结尾的引号,并恢复PHP中用“\”转义的字符。这就是“取消引用字符串”的直观含义

例如,表达式
var\u export($value,true)
总是单引号引用其结果并转义某些字符


这个表达式将很好地“取消引用”这样一个字符串:
stripslashes(substr(substr($str,1),0,-1))

参数化查询:
$stmt=$dbh->prepare(“插入电子邮件(email)值(?);$stmt->execute(数组($\u POST['email']);
完成。斜线和引号不是一回事,为什么一个叫做“stripslashes”的函数“去掉引号?这似乎是一个不幸的词语选择。它当然不是
quote
函数所做的任何事情的逆函数。如果使用PDO之类的东西来传递绑定参数,为什么还要担心它呢?如果你愿意的话,可以在装订前进行消毒。不,这就是问题所在