PHP提交表单,转义报价?

时间:2011-08-13 04:14:01

标签: php html

如果我的表单的值只有""并且我提​​交它并用PHP回显它,我会得到\"\"

我怎样才能解决这个问题?

5 个答案:

答案 0 :(得分:5)

这是因为magic_quotes_gpc已启用。这是一个糟糕的“功能”,旨在为那些无法学习逃避SQL输入的开发人员自动转发传入数据。

你应该尽快禁用它。

ini_set('magic_quotes_gpc', 'off');

答案 1 :(得分:2)

你应该关闭magic_quotes_gpc,这是一个破碎的功能(见Delan的回答,我完全同意)。

但是等等! 您必须从$ _REQUEST,$ _POST和$ _GET以及$ _COOKIE清理用户输入,如果您想将其用于数据库或在您的页面显示!否则,您的代码将容易受到各种类型的攻击!

没有像“普遍消毒”这样的东西。我们称之为引用,因为这就是它的全部内容。

引用时,始终为某些特定输出 引用文字,例如:

  1. mysql查询的字符串值
  2. like mysql查询表达式
  3. html代码
  4. JS​​ON
  5. mysql正则表达式
  6. php正则表达式
  7. 对于每种情况,您需要不同的引用,因为每种用法都存在于不同的语法上下文中。这也意味着引用不应该在PHP的输入中进行,而是在特定的输出!这就是为什么像magic_quotes_gpc这样的功能被破坏的原因(总是保证它被关闭!!!)。

    那么,在这些特定情况下,用什么方法来引用? (随意纠正我,可能有更现代的方法,但这些对我有用)

    1. mysql_real_escape_string($str)
    2. mysql_real_escape_string(addcslashes($str, "%_"))
    3. htmlspecialchars($str)
    4. json_encode() - 仅适用于utf8!我将我的功能用于iso-8859-2
    5. mysql_real_escape_string(addcslashes($str, '^.[]$()|*+?{}')) - 在这种情况下你不能使用preg_quote,因为反斜杠会被转义两次!
    6. 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']);