上下文
我正在为一个基于grapesjs-mjml的电子邮件模板生成器构建一个保存/加载系统。我将我的MJML代码保存在BDD(MySQL(中。
我的当前代码
我通过ajax调用发送我的模板名称和模板MJML代码,看起来像
let params = "name="+template_name + "&html="+template_mjml;
var xhttp = new XMLHttpRequest();
xhttp.open("POST", "save.php", true);
xhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// doing stuffs when it's saved
}
};
xhttp.send(params);
在服务器端,我用标准的$_POST['html']
获取html
值
我的问题
有时,我的html
参数中有url(例如,可能是链接(。在这些url中,有一些&
,这意味着我的$_POST['html']
没有读取整个参数:它就在我的html
代码的第一个&
之前停止
我的脏解决方案
在客户端,我添加了一个html = html.replaceAll('&','//amp;')
,并且在服务器端执行相反的功能。也就是说,我正在删除我的"html"参数中的所有&
,但这不是很好。。。
我想知道你们中是否有人知道更好的解决方案?
您应该使用encodeURIComponent()
。这将正确地对特殊字符进行编码。
let params = "name=" + encodeURIComponent(template_name) + "&html=" + encodeURIComponent(template_mjml);