XMLHttpRequest POST到PHP删除加号

XMLHttpRequest POST to PHP removes plus-signs

本文关键字:删除 PHP POST XMLHttpRequest      更新时间:2023-09-26

我使用将HTML5画布元素中的JPEG文件作为字符串发布到PHP

function createJPG() {
    var dataUrl = document.getElementById('canvas').childNodes[4].toDataURL("image/jpeg");
    console.log(dataUrl);
    var params = "theimage=" + dataUrl;
    var http = new XMLHttpRequest();
    http.open("POST", "/avatar/php/save-avatar.php", true);
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.send(params);
}

一切都很好,dataUrl是正确的(在控制台中),并且包含一个有效的JPEG文件。但是当我用PHP检索它时,所有的加号都被空格取代了?

PHP代码:

$name = "image.jpg";
$data=$_POST['theimage'];
file_put_contents($name, base64_decode(substr($data, strpos($data, ",")+1)));
file_put_contents("../images/avatars/uploads/generated" . rand(0,200) . ".txt", $data);

我使用文本文件来查看数据的样子,因为我不想知道如何回显到JS:)。文本文件包含与JS控制台日志完全相同的数据,但没有+,而是带有空格,这导致JPEG文件损坏。

我该怎么办?

它不会删除它们。+application/x-www-form-urlencoded数据中的意思是"一个空间"。因此,当在服务器上对URI进行解码时,它们会被转换为空格。

由于总是获取一些数据并将其放入URL,因此需要对其进行编码:

var params = "theimage=" + encodeURIComponent(dataUrl);

您应该对数据进行URL编码Url:

var params = "theimage=" + urlencode(dataUrl);