Heim >Backend-Entwicklung >PHP-Problem >Was tun, wenn die PHP-Base64-Kodierung verstümmelt ist?

Was tun, wenn die PHP-Base64-Kodierung verstümmelt ist?

PHPz
PHPzOriginal
2023-04-24 14:51:082328Durchsuche

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:

  1. base64-String enthält data:image/jpeg;base64 und andere Präfixe und Trennzeichen. Sie müssen es zuerst tun Entfernung.
  2. Die Base64-Zeichenfolge enthält URL-codierte Zeichen wie +, / usw., die vor der Decodierung decodiert werden müssen.
  3. Die Option magic_quotes_gpc ist in der PHP-Konfiguration aktiviert, was dazu führt, dass Zeichen wie einfache Anführungszeichen und doppelte Anführungszeichen maskiert werden, was zu Problemen beim Dekodieren führt.
  4. Während des Übertragungsprozesses wird aus verschiedenen Gründen (z. B. chinesische Codierungsprobleme usw.) ein Teil der Daten geändert, was sich wiederum auf die Base64-Decodierung auswirkt.

Die Lösung lautet wie folgt:

  1. Präfixe und Trennzeichen entfernen

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);
  1. URL-kodierte Zeichen dekodieren

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);
  1. Option „magic_quotes_gpc“ deaktivieren

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
  1. Datenintegritätsprüfung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn