【发布时间】:2020-03-29 12:20:58
【问题描述】:
因此,我构建了自己的初级 CMS,其中包含一个后端页面,管理员可以在其中输入页面标题、描述、社交媒体资料等内容。我还为头部和身体中的代码注入进行了输入——用于跟踪。我通过将表单数据转换为字符串并将其与 XMLHttpRequest 一起发布到 PHP 文件来保存表单数据。要将数据转换为字符串,我使用 base64 编码。然而——虽然文本、url 和简单的 html 标记可以正常工作,但这与引号或脚本标记不能很好地配合。它们要么在插入后产生格式错误的字符,要么似乎完全阻止了字符串的插入。有人知道如何实现这一目标吗?
这是我的 javascript 的相关部分:
const request = new XMLHttpRequest();
siteInfo.addEventListener('submit', function (e) {
e.preventDefault();
let trackingHead = btoa(codeEditorHead.getValue());
let trackingBody = btoa(codeEditorBody.getValue());
let requestString = 'tracking-head=' + trackingHead + '&tracking-body=' + trackingBody;
request.open('POST', '/includes/update-siteinfo.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.send(requestString);
});
哦,顺便说一句,我使用 CodeMirror 作为输入字段,因此使用 getValue 函数。
这里是对应的PHP:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!empty($_POST['tracking-head'])) {
$trackingHead = base64_decode($_POST['tracking-head']);
}
if (!empty($_POST['tracking-body'])) {
$trackingBody = base64_decode($_POST['tracking-body']);
}
}
在这之后是一些错误处理和插入语句。显然,我的错误处理程序都没有触发,这让我相信问题出在 javascript 请求中,而不是在 php 中。
这是编码问题吗?我使用了错误的标题吗? base64 是字符串化代码的最佳方法吗?还是我可能误解了有关 XMLHttpRequests 工作原理的一些基本知识? ¯\_(ツ)_/¯
【问题讨论】:
标签: javascript php utf-8 xmlhttprequest base64