“每个引号前的斜杠”问题

2022-08-30 23:11:04

我有一个包含表单的php页面。

有时此页面会提交给自己(例如上传图片时)。

我不希望用户必须一次又一次地填写每个字段,所以我将其用作表单中文本输入的值:

value="<?php echo htmlentities(@$_POST['annonsera_headline'],ENT_COMPAT,'UTF-8');?>">

这有效,除了它在每个双引号之前添加一个“\”符号...

例如,在页面提交到自身后,写入19“轮子会给出:

  19\" wheels

如果我甚至不使用htmlentities,那么引号后面的所有内容都会消失。

这是什么问题?

更新:

好吧,所以概率是magic_quotes...这在我的服务器上已启用...

我应该禁用它吗?我有root访问权限,这是我的服务器:)

禁用它有什么害处?


答案 1

看起来你打开了魔术报价。使用以下条件,将 stripslash 与要处理的任何文本一起使用:

if(get_magic_quotes_gpc())
{
   $your_text = stripslashes($your_text);
}

现在,您可以正常处理变量。$your_text

更新:

魔术报价在这里解释。对于编写良好的代码,禁用它通常没有坏处。


答案 2

您可能打开了魔术引号。你也需要剥离斜杠()它。

最好的方法是将它包装在一个函数中:

function get_string($array, $index, $default = null) {
    if (isset($array[$index]) && strlen($value = trim($array[$index])) > 0) {
        return get_magic_quotes_gpc() ? stripslashes($value) : $value;
    } else {
        return $default;
    }
}

您可以将其用作

$annonsera_headline = get_string($_POST, 'annonsera_headline');

顺便一提:

如果我甚至不使用htmlentities,那么引号后面的所有内容都会消失。

它实际上仍然存在于HTML源代码中,只是你看不到它。执行视图源 ;)


根据您的更新进行更新魔术引号用于防止初学者代码中的SQL注入攻击。您经常在第三方主机中看到这种情况。如果您真的知道自己在代码中做了什么,那么您可以安全地将其关闭。但是,如果你想让你的代码可分发,那么在收集请求参数时,你真的会考虑到这一点。为此,上面的函数示例是完全合适的(您只需要自己编写 simliar 、 、 函数)。get_boolean()get_number()get_array()


推荐