Kürzlich bin ich bei der Entwicklung einer Webanwendung basierend auf der Front-End- und Back-End-Trennung auf ein schwieriges Problem gestoßen: Nachdem das Front-End JavaScript zur Base64-Codierung des Bildes verwendet hat, wird es an das Back-End-PHP übertragen Programm zum Dekodieren, und das Ergebnis ist verstümmelter Code.
Nach vielen Versuchen und Recherchen habe ich einige Lösungen zusammengefasst und teile sie Ihnen als Referenz mit.
Lassen Sie uns zunächst die Grundprinzipien der Base64-Kodierung und -Dekodierung verstehen. Base64 ist eine Methode, die 64 Zeichen zur Darstellung von Binärdaten verwendet. Die Daten werden in Gruppen von 6 Bits klassifiziert. Die entsprechenden Zeichen werden im vordefinierten Zeichensatz basierend auf dem 6-Bit-Wert gefunden, um den Bytecode in den ursprünglichen Binärdaten zu ersetzen. Auf diese Weise können beliebige Daten zur einfachen Übertragung und Speicherung in druckbare ASCII-Zeichen umgewandelt werden.
In JavaScript können Sie eine Base64-codierte Zeichenfolge mit Bilddaten generieren, indem Sie die Funktion toDataURL() des Canvas-Objekts aufrufen:
var canvas = document.createElement('canvas'); canvas.width = 400; canvas.height = 300; var ctx = canvas.getContext('2d'); ctx.fillStyle = '#fff'; ctx.fillRect(0, 0, 400, 300); var img = new Image(); img.src = './test.jpg'; img.onload = function() { ctx.drawImage(img, 0, 0, 400, 300); var dataURL = canvas.toDataURL('image/jpeg', 0.8); // 传输dataURL给后端进行base64解码 };
In PHP können Sie base64_decode verwenden ( )-Funktion dekodiert die Base64-codierte Zeichenfolge in rohe Binärdaten für weitere Vorgänge.
Während des tatsächlichen Betriebs stellten wir jedoch fest, dass manchmal verstümmelte Zeichen angezeigt wurden. Warum ist das so?
Die Gründe für verstümmelte Zeichen sind wie folgt:
Die Lösung lautet wie folgt:
kann durch ersetzt werden Entfernen Sie bei der String-Methode Präfixe und Trennzeichen wie data:image/jpeg;base64 usw. und verwenden Sie den Base64-String direkt zum Dekodieren.
$data = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/…'; // base64编码的图片数据 $data = str_replace('data:image/jpeg;base64,', '', $data); $data = str_replace(' ', '+', $data); // 如果出现URL编码中的+,需要替换成空格。 $data = base64_decode($data);
Verwenden Sie die Funktion urldecode(), um URL-kodierte Zeichen zu dekodieren, und verwenden Sie dann base64_decode() für base64 Dekodierung.
$data = 'data:image/jpeg;base64,%2F9j%2F4AAQSk...'; // base64编码的图片数据 $data = urldecode($data); $data = base64_decode($data);
Suchen Sie in php.ini nach magic_quotes, setzen Sie es auf „Aus“ und starten Sie dann PHP neu, damit es wirksam wird.
magic_quotes_gpc = Off
Bei der Übertragung von Daten am Front- und Backend kann eine Integritätsprüfung der Daten durchgeführt werden, um sicherzustellen, dass die Daten vorhanden sind nicht geändert. Sie können beispielsweise md5() verwenden, um die Originaldaten zu verdauen und an das Backend zu übertragen. Das Backend verarbeitet dann die empfangenen Binärdaten und vergleicht die beiden Digest-Werte Der Dekodierungsvorgang kann durchgeführt werden.
Zusammenfassung:
Die oben genannten Lösungen sind einige Lösungen, die ich bei der Lösung des Problems verstümmelter Zeichen bei der PHP-Base64-Dekodierung zusammengefasst habe. Sie können sie entsprechend Ihrer tatsächlichen Situation auswählen und ausprobieren. Haben Sie bei der Webentwicklung keine Angst, wenn Sie auf Probleme stoßen, und konsultieren Sie weitere Informationen. Ich glaube, Sie werden immer eine Lösung finden.
Das obige ist der detaillierte Inhalt vonWas tun, wenn die PHP-Base64-Kodierung verstümmelt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!