Lorsque vous utilisez PHP pour télécharger des fichiers, si le nom du fichier contient des caractères chinois, le téléchargement peut échouer. En effet, dans le protocole HTTP, les caractères chinois du nom de fichier doivent être codés pour être transmis correctement, et PHP n'effectue pas cet encodage par défaut, provoquant ainsi l'échec du téléchargement.
Maintenant, discutons de la façon de résoudre ce problème.
Lorsque nous utilisons PHP pour télécharger des fichiers, si le nom du fichier téléchargé contient des caractères chinois, le téléchargement peut signaler une erreur. Le message d'erreur est généralement constitué de caractères tronqués incompréhensibles, et la cause de l'erreur ne peut pas être. clairement souligné.
Par exemple, nous essayons de télécharger un fichier nommé "Test Image.jpg". Pendant le processus de téléchargement, si le nom du fichier contient des caractères chinois, tels que "Test Image (Chinese).jpg", le téléchargement peut échouer et un Le message d'erreur sera signalé comme suit :
Warning: move_uploaded_file(): Unable to move '/tmp/php12efan' to '/var/www/html/upload/测试图片(中文).jpg'
Vous pouvez voir que le nom du fichier dans le message d'erreur est tronqué et la cause de l'erreur ne peut pas être clairement indiquée.
La raison de ce problème est que dans le protocole HTTP, les caractères chinois doivent être codés pour être transmis correctement. Lorsque vous utilisez PHP pour télécharger des fichiers, PHP convertira par défaut le nom du fichier téléchargé au format d'encodage ISO-8859-1, et les caractères chinois ne sont pas inclus dans l'encodage ISO-8859-1, donc des caractères tronqués apparaîtront.
Si nous regardons la requête HTTP téléchargée, nous pouvons voir que le nom du fichier téléchargé est comme ceci :
Content-Disposition: form-data; name="file"; filename="测试图片(中文).jpg"
Vous pouvez voir que le nom du fichier téléchargé n'est en aucun cas codé.
Il existe de nombreuses façons de résoudre ce problème. Nous proposons ici deux solutions courantes.
Nous pouvons convertir manuellement l'encodage du nom de fichier téléchargé pour obtenir le nom de fichier correct. L'opération spécifique est la suivante :
$file = $_FILES['file']; $filename = iconv('UTF-8', 'ISO-8859-1', $file['name']); move_uploaded_file($file['tmp_name'], '/var/www/html/upload/' . $filename);
Dans le code ci-dessus, nous utilisons la fonction iconv
pour convertir le nom de fichier de l'encodage UTF-8 en encodage ISO-8859-1, obtenir le nom de fichier correct , puis Effectuer le téléchargement de fichiers. L’inconvénient de cette méthode est qu’elle est relativement lourde et nécessite une conversion manuelle du codage, ce qui n’est pas assez pratique. iconv
函数将文件名从UTF-8编码转换为ISO-8859-1编码,得到了正确的文件名,然后再进行文件上传。这种方法的缺点是比较繁琐,需要手动进行编码转换,不够方便。
我们可以修改PHP配置文件,让PHP自动进行编码转换,从而避免了手动编码转换的过程。具体操作如下:
打开php.ini文件,找到以下两行:
; Default charset for auto content type. ; http://php.net/default-charset default_charset = "UTF-8"
在; Default charset for auto content type.
这一行的后面添加以下内容:
; Add charset=utf-8 to Content-Type header for files with non-ASCII names ; that have been encoded using RFC 2231 suhosin.upload.unicode.semantics=1
通过以上操作,我们就成功修改了PHP的配置文件,让PHP自动进行编码转换,解决了上传带中文的图片报错的问题。这种方法比较方便,但是需要注意的是,在使用此方法之前,需要确保服务器上已经安装了Suhosin
; Jeu de caractères par défaut pour le type de contenu automatique.
Le contenu suivant : 🎜rrreeeSuhosin
a été installée sur le serveur. 🎜🎜Résumé🎜🎜Lorsque vous utilisez PHP pour télécharger des fichiers, si le nom du fichier téléchargé contient des caractères chinois, vous pouvez rencontrer un échec de téléchargement. Pour résoudre ce problème, vous pouvez effectuer manuellement la conversion de l'encodage, ou vous pouvez modifier le fichier de configuration PHP et laisser PHP effectuer automatiquement la conversion de l'encodage. Les deux méthodes ont leurs propres avantages et inconvénients, et vous pouvez choisir la méthode appropriée pour la résoudre en fonction. situation réelle. 🎜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!