0

我正在开发一个应用程序,用户可以在其中创建 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); ?>;

这会是个问题吗?

4

2 回答 2

2

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

我相信你需要使用这个:

json_encode($IdLessContent, JSON_UNESCAPED_SLASHES);

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

于 2013-02-28T11:12:15.740 回答
2

对于最新版本的 PHP,monkeymatrix 的答案是不正确的(我在 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 来自动处理任何转义。我只创建了这个函数来处理一些遗留代码,这些代码在输入上转义了所有内容,我需要一种方法来返回原始数据。

于 2019-02-04T04:38:38.297 回答