如果我的表单的值只有""
并且我提交它并用PHP回显它,我会得到\"\"
我怎样才能解决这个问题?
答案 0 :(得分:5)
这是因为magic_quotes_gpc
已启用。这是一个糟糕的“功能”,旨在为那些无法学习逃避SQL输入的开发人员自动转发传入数据。
你应该尽快禁用它。
ini_set('magic_quotes_gpc', 'off');
答案 1 :(得分:2)
你应该关闭magic_quotes_gpc,这是一个破碎的功能(见Delan的回答,我完全同意)。
但是等等! 您必须从$ _REQUEST,$ _POST和$ _GET以及$ _COOKIE清理用户输入,如果您想将其用于数据库或在您的页面显示!否则,您的代码将容易受到各种类型的攻击!
没有像“普遍消毒”这样的东西。我们称之为引用,因为这就是它的全部内容。
引用时,始终为某些特定输出 引用文字,例如:
like
mysql查询表达式对于每种情况,您需要不同的引用,因为每种用法都存在于不同的语法上下文中。这也意味着引用不应该在PHP的输入中进行,而是在特定的输出!这就是为什么像magic_quotes_gpc
这样的功能被破坏的原因(总是保证它被关闭!!!)。
那么,在这些特定情况下,用什么方法来引用? (随意纠正我,可能有更现代的方法,但这些对我有用)
mysql_real_escape_string($str)
mysql_real_escape_string(addcslashes($str, "%_"))
htmlspecialchars($str)
json_encode()
- 仅适用于utf8!我将我的功能用于iso-8859-2 mysql_real_escape_string(addcslashes($str, '^.[]$()|*+?{}'))
- 在这种情况下你不能使用preg_quote,因为反斜杠会被转义两次!preg_quote()
答案 2 :(得分:1)
尝试stripslashes()。 stripslashes()与addslashes()相反,并从字符串中删除转义斜杠。
答案 3 :(得分:1)
您可以使用stripslashes()
功能。
http://php.net/manual/en/function.stripslashes.php
此行为是由“Magic Quotes”PHP-Feature引起的。 http://php.net/manual/en/security.magicquotes.php
无论是否启用魔术引号,您都可以使用类似的内容使其正常工作:
if (get_magic_quotes_gpc()) {
$data = stripslashes($_POST['data']);
}
else {
$data = $_POST['data'];
}
答案 4 :(得分:0)
我总是使用这个方法,因为它将值作为字符串抓取,因此不会有斜杠:
$variable = mysql_escape_string($_REQUEST['name_input']);