我正在开发一个应用程序,用户可以在其中创建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); ?>;
这可能是个问题吗?
答案 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与参数绑定一起使用,以自动处理任何转义。我仅创建此函数来处理一些遗留代码,这些遗留代码会将输入中的所有内容转义,并且我需要一种方法来恢复原始数据。