扭转了'mysqli_real_escape_string`的效果

时间:2013-02-28 11:10:35

标签: php mysql function

我正在开发一个应用程序,用户可以在其中创建HTML模板并将其保存到数据库。模板由不同的组件组成,如文本,图像等。当我尝试使用撇号保存文本 '它给了我mysql_error(很明显)。所以我尝试mysqli_real_escape_strings来确定它。它有效,但我想取回已保存的内容以进行编辑目的和撇号使用\(斜杠)进行转义。因此内容在内部被修改,不再是一个有效的html进行编辑,浏览器会抛出语法错误。        我也尝试搜索其他函数进行转义并遇到json_encode但是mysql不接受 有人能指出我在PHP中执行此操作的任何功能吗?请建议任何能为我执行任务的功能!

更新

  function saveContent(){   
    var $getContent = $('#mainWrap').clone();
    $getContent.find('.textBox, .pictureBox').removeAttr('id');
    var saveContent  = $getContent.wrap('<div></div>').html();
    console.log(saveContent);
    var getBodyStyle=$('body').attr('style');
    console.log('this is body style'+getBodyStyle);
    var auto="auto";
    $.ajax({
        url:"auto_save.php",
        type:"POST",
        dataType:"text",
        //data:"txtComp="+saveContent+"&auto="+auto+"&pageId="+pageId+"&webId="+webId+"&userId="+userId+"&bodyStyle="+getBodyStyle,
        data: {txtComp: saveContent, auto: auto, pageId: pageId,webId:webId,userId:userId,bodyStyle:getBodyStyle}
    }); 
 }  

我在mysql_real_escape_string中添加了auto_save.php。现在当我从DB中取回它时,我必须将它传递给这样的javascript变量。

    var getSavedContent = <?php echo json_encode($IdLessContent); ?>;

这可能是个问题吗?

2 个答案:

答案 0 :(得分:1)

stripslashes()将从任何字符串中删除斜杠,在输出转义数据时非常有用。

我相信你需要使用它:

json_encode($IdLessContent, JSON_UNESCAPED_SLASHES);

使用UNESCAPED_SLASHES部分,您的数据应该正确返回。

答案 1 :(得分:0)

monkeymatrix答案对于最新版本的PHP不正确(我在7.3上进行了测试)。 mysqli_real_escape_string()仅转义某些字符。这是将其反转的函数:

function reverse_mysqli_real_escape_string($str) {
    return strtr($str, [
        '\0'   => "\x00",
        '\n'   => "\n",
        '\r'   => "\r",
        '\\\\' => "\\",
        "\'"   => "'",
        '\"'   => '"',
        '\Z' => "\x1a"
    ]);
 }

在编写正确的应用程序中,几乎不需要此功能。您应该将PDO与参数绑定一起使用,以自动处理任何转义。我仅创建此函数来处理一些遗留代码,这些遗留代码会将输入中的所有内容转义,并且我需要一种方法来恢复原始数据。