有没有一种方法可以在ajax调用(vanillaJS)中的params内部发送params



上下文

我正在为一个基于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);

最新更新