Récemment, lors du développement d'une application Web basée sur la séparation front-end et back-end, j'ai rencontré un problème assez difficile : une fois que le front-end utilise JavaScript pour encoder l'image en base64, elle est transmise au programme PHP back-end pour décodage, et le résultat est un code tronqué.
Après de nombreuses tentatives et recherches, j'ai résumé quelques solutions et les partage avec vous pour votre référence.
Tout d’abord, comprenons les principes de base de l’encodage et du décodage base64. Base64 est une méthode qui utilise 64 caractères pour représenter les données binaires. Les données sont classées en groupes de 6 bits. Les caractères correspondants se trouvent dans le jeu de caractères prédéfini en fonction de la valeur de 6 bits pour remplacer le bytecode dans les données binaires d'origine. De cette manière, toutes les données peuvent être converties en caractères ASCII imprimables pour faciliter la transmission et le stockage.
En JavaScript, vous pouvez générer une chaîne codée en base64 contenant des données d'image en appelant la fonction toDataURL() de l'objet canevas :
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解码 };
En PHP, vous pouvez utiliser la fonction base64_decode() pour décoder la chaîne codée en base64 en données binaires brutes, continuez.
Cependant, lors du fonctionnement réel, nous avons constaté que des codes tronqués apparaissent parfois. Pourquoi ?
Les raisons des caractères tronqués sont les suivantes :
La solution est la suivante :
Vous pouvez utiliser le remplacement de chaîne pour supprimer les préfixes et les délimiteurs tels que data:image/jpeg;base64, etc., et utiliser directement les chaînes base64 pour le décodage.
$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);
Utilisez la fonction urldecode() pour décoder les caractères codés en URL, puis utilisez base64_decode() pour le décodage en base64.
$data = 'data:image/jpeg;base64,%2F9j%2F4AAQSk...'; // base64编码的图片数据 $data = urldecode($data); $data = base64_decode($data);
Recherchez magic_quotes dans php.ini, réglez-le sur Off, puis redémarrez php pour prendre effet.
magic_quotes_gpc = Off
Lors de la transmission de données aux extrémités avant et arrière, l'intégrité des données peut être vérifiée pour garantir qu'elles n'ont pas été modifiées. Par exemple, vous pouvez utiliser md5() pour digérer les données d'origine et les transmettre au backend. Le backend digère ensuite les données binaires reçues et compare les deux valeurs de résumé. Si elles sont identiques, les données n'ont pas été modifiées et les valeurs de résumé sont identiques. une opération de décodage peut être effectuée.
Résumé :
Ci-dessus sont quelques solutions que j'ai résumées lors de la résolution du problème des caractères tronqués dans le décodage php base64. Vous pouvez choisir et essayer en fonction de votre situation réelle. Lorsque vous développez du Web, n'ayez pas peur lorsque vous rencontrez des problèmes. Essayez davantage et consultez plus d'informations. Je pense que vous trouverez toujours une solution.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!