'“原来是'和'

时间:2010-11-19 09:26:06

标签: php jquery ajax character-encoding

所以我有一个你可以输入的字段。输入后按ok键,它会向save.php发送ajax调用并将其插入数据库(使用php),然后输出你拥有的内容类型。然后ajax调用succes来获取输出并发出警报(success: function(msg){ alert(msg) })。回复是html。

在我在字段中使用'"之前一直运行良好。例如,如果我写:'asdadsasd"结果是:\'asdadsasd\"我该如何解决这个问题?

不知道是否重要,但在save.php中我有:

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header('Content-type: text/html; charset=utf-8');

它输出如下信息:

echo htmlspecialchars(strip_tags($message), ENT_QUOTES, 'utf-8'); 

4 个答案:

答案 0 :(得分:2)

这很可能是由于PHP的特殊有用的令人恼火的"magic quotes"功能造成的。魔术引号会自动在用户代理(即$_GET$_POST$_COOKIE或“GPC”提供的传入数据中的单引号和双引号之前插入斜杠,模糊尝试为那些没有意识到非转义用户输入危险的人提供一些安全保障。

当然,在尝试使用任何GPC数据之前,您应该始终使用get_magic_quotes_gpc检查魔术引号。如果已启用,只需在输入之前调用stripslashes即可。

我在我编写的任何脚本的开头使用类似的东西:

function cleanInput($input)
{
    if (is_array($input))
    {
        foreach ($input as &$value)
        {
            $value = cleanInput($value);
        }

        return $input;
    }
    else
    {
        return stripslashes($input);
    }
}

if (get_magic_quotes_gpc())
{
    $_GET = cleanInput($_GET);
    $_POST = cleanInput($_POST);
    $_COOKIE = cleanInput($_COOKIE);
    $_REQUEST = cleanInput($_REQUEST);
}

答案 1 :(得分:1)

尝试在其上调用stripslashes。我认为它通过ajax发布/发送时会添加斜杠。

答案 2 :(得分:1)

这是因为ENT_QUOTES选项,我让您检查:http://php.net/manual/en/function.htmlentities.php

编辑:我忘记了斜线,你激活了magic_quotes吗?

答案 3 :(得分:1)

使用 stripslashes