包含单引号的JQuery $ .get和PHP返回单引号的反斜杠

时间:2014-02-13 06:44:03

标签: javascript php jquery ajax json

我正在从客户端(特别是javascript和Jquery库)向服务器(在PHP中运行)发送数据。我发送的信息如下:

来自Chrome开发工具 - >网络

Request URL:http://host:8888/RoviImages.php?id=880&aid=334&albumTitle=The+Lion%27s+Roar&albumId=MW0002231494
Request Method:GET
Status Code:200 OK

Query String Parameters
id:880
aid:334
albumTitle:The Lion's Roar
albumId:MW0002231494

客户端代码是:

var data = {id: song_id, aid: aid, albumTitle: albumTitle, albumId: albumId};
$.get(request_url, data)

在发送之前检查信息我将albumTitle称为“ The Lion's Roar

当PHP收到信息时,我要做的第一件事就是打印它。

$albumTitle =    $_GET['albumTitle'];
error_log('Album Title = ' . $albumTitle);

这使我返回“专辑标题=狮子的咆哮”。

处理完信息后,我使用 json_encode 回应对javascript的响应。 Javascript获得响应,当它通过 JSON.parse 对其进行解码时,结果是“狮子的咆哮”。

所以基本上它会进入服务器,但我会通过更改来恢复它。为什么呢?

2 个答案:

答案 0 :(得分:2)

魔术引号设置可能已开启。请参阅http://nl3.php.net/security.magicquotes

在脚本顶部添加此项以自动从输入中删除所有斜杠:

if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}

答案 1 :(得分:-1)

更好地禁用魔术引号,请参阅HERE,如果无法禁用,可以使用此功能删除:

if (get_magic_quotes_gpc()) {
    function stripslashes_gpc(&$value) {
        $value = stripslashes($value);
    }
    array_walk_recursive($_GET, 'stripslashes_gpc');
    array_walk_recursive($_POST, 'stripslashes_gpc');
    array_walk_recursive($_COOKIE, 'stripslashes_gpc');
    array_walk_recursive($_REQUEST, 'stripslashes_gpc');
}