php上传中文文件名乱码问题处理方案_php实例
php上传文件是最最基础的一个技术点,但是深入进去也有不少问题需要解决,这不,上传中文文件后,文件名变成了乱码。
下面是问题代码,很简单:
1.问题代码
html部分:
enctype="multipart/form-data">
php部分:
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "
";
}else
{
echo "Upload: " . $_FILES["file"]["name"] . "
";
echo "Type: " . $_FILES["file"]["type"] . "
";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb
";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "
";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
}
}
上传了一个文件名为“测试数据.txt”的文件,oh ho,文件是传上去了,但是文件名为乱码。
2.初试
网上搜索一下解决方案,将
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
改成
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . iconv("UTF-8","gbk",$_FILES["file"]["name"]));
结果发现iconv函数返回值为false。
查一下函数手册,发现第二个参数有特别的用法,简单翻译一下就是我可以在编码的后面追加//TRANSLIT 或 //IGNORE ,前者会将无法翻译的字符转成最接近的字符,后者就是直接忽略不能转化的字符。
试一下:
var_dump( iconv("UTF-8","gbk//TRANSLIT",$_FILES["file"]["name"]));
var_dump( iconv("UTF-8","gbk//IGNORE",$_FILES["file"]["name"]));
结果:
bool(false) string(4) ".txt"
也就是说中文都没法转化,甚至连接近的字符都没有,看来网上介绍的方法也并非万能。
3.网上介绍方法失败,再尝试
猜测一下,也许我的系统在创建中文文件的时候会乱码,于是我将代码改写了一下:
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/测试数据.txt");
结果创建成功,没有乱码。。。也就是说不是系统问题。
想一下,我的php文件本身是utf8编码的,那么
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/测试数据.txt");
这个语句肯定使用的是utf8编码,那么之前上传的文件名肯定就不是utf8编码了,那么以下的语句肯定是错误的,因为源字符串本身就不是utf8编码的:
iconv("UTF-8","gbk//TRANSLIT",$_FILES["file"]["name"]);
使用函数检查源字符串的编码:
$e=mb_detect_encoding($text, array(‘UTF-8', ‘GBK','gb2312'));
echo $e;
结果是CP936,也就是源字符串编码是GBK。
试一下
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . iconv("gbk","UTF-8",$_FILES["file"]["name"]));
问题解决,不再乱码
4.另一种解决办法
实际上还有一种解决办法,就是在html文件的head标签中间加入
从而使编码保持统一,也就不需要再转码了
5.下面是结论
使用iconv函数可以解决上传中文文件名乱码的问题,实际上iconv能解决各种各样的由于编码不统一造成的乱码问题。
使用iconv函数请先检查源字符串的编码,除非你已经确定了源字符串的编码。
尽量保证所有的代码的编码一致,万不得已才使用iconv函数。
吐槽一下,尽量不使用中文文件名作为服务器上保存的文件名,请将文件名转化成自己的文件名(即使是英文文件名也请转化一下)。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Méthodes pour résoudre le problème chinois tronqué de PHPDompdf PHPDompdf est un outil de conversion de documents HTML en fichiers PDF. Il est puissant et facile à utiliser. Cependant, lors du traitement du contenu chinois, vous rencontrez parfois le problème des caractères chinois tronqués. Cet article présentera quelques méthodes pour résoudre le problème des caractères chinois tronqués dans PHPDompdf et fournira des exemples de code spécifiques. 1. Lors de l'utilisation de fichiers de polices pour traiter du contenu chinois, un problème courant est que Dompdf ne prend pas en charge le contenu chinois par défaut.

La méthode ultime pour résoudre le problème des caractères chinois tronqués dans PyCharm nécessite des exemples de code spécifiques Introduction : PyCharm, en tant qu'environnement de développement intégré (IDE) Python couramment utilisé, possède des fonctions puissantes et une interface utilisateur conviviale, et est apprécié et utilisé par les utilisateurs. majorité des développeurs. Cependant, lorsque PyCharm traite des caractères chinois, il peut parfois rencontrer des caractères tronqués, ce qui provoque certains problèmes de développement et de débogage. Cet article explique comment résoudre le problème du chinois tronqué dans PyCharm et donne des exemples de code spécifiques. 1. Mettre en place le projet

Raisons et solutions courantes pour les caractères chinois tronqués dans l'installation de MySQL MySQL est un système de gestion de base de données relationnelle couramment utilisé, mais vous pouvez rencontrer le problème des caractères chinois tronqués lors de l'utilisation, ce qui pose des problèmes aux développeurs et aux administrateurs système. Le problème des caractères chinois tronqués est principalement dû à des paramètres de jeu de caractères incorrects, à des jeux de caractères incohérents entre le serveur de base de données et le client, etc. Cet article présentera en détail les causes courantes et les solutions des caractères chinois tronqués dans l'installation de MySQL pour aider tout le monde à mieux résoudre ce problème. 1. Raisons courantes : paramètre du jeu de caractères

Solutions pour qu'Ajax transmette des caractères chinois tronqués : 1. Définir une méthode de codage unifiée ; 2. Codage côté serveur ; 3. Décodage côté client ; 4. Définir les en-têtes de réponse HTTP ; Introduction détaillée : 1. Définissez une méthode de codage unifiée pour garantir que le serveur et le client utilisent la même méthode de codage. Dans des circonstances normales, UTF-8 est une méthode de codage couramment utilisée car elle peut prendre en charge plusieurs langues et jeux de caractères ; 2, Codage côté serveur. Côté serveur, assurez-vous que les données chinoises sont codées selon la méthode de codage correcte, puis transmises au client, etc.

Le problème des caractères chinois tronqués dans les pages Web PHP est que les caractères chinois sont affichés sous forme de caractères tronqués dans l'affichage de la page Web. Cette situation est généralement due à un encodage incohérent ou au jeu de caractères non défini. Résoudre le problème des caractères chinois tronqués dans les pages Web PHP nécessite de partir de plusieurs aspects. Voici quelques solutions courantes et exemples de code spécifiques. Définir l'encodage du fichier PHP : Assurez-vous d'abord que l'encodage du fichier PHP lui-même est UTF-8. Vous pouvez définir l'encodage UTF-8 lors de l'enregistrement dans l'éditeur, ou ajouter le code suivant à l'en-tête du fichier PHP pour le définir. l'encodage : &l

Le problème des caractères chinois tronqués sous Linux est un problème que de nombreux utilisateurs chinois rencontrent souvent lorsqu'ils utilisent des systèmes Linux. La principale raison des caractères chinois tronqués est que le codage de caractères par défaut utilisé par le système Linux est UTF-8, mais certains logiciels ou applications peuvent ne pas être compatibles avec le codage UTF-8, ce qui entraîne un affichage incorrect des caractères chinois. Il existe de nombreuses façons de résoudre ce problème. Plusieurs solutions courantes seront détaillées ci-dessous et des exemples de code spécifiques seront fournis. Modifier les paramètres de codage des caractères du terminal : Les paramètres de codage des caractères du terminal déterminent si le terminal peut correctement

Des conseils pratiques pour résoudre rapidement les caractères chinois tronqués dans Eclipse nécessitent des exemples de code spécifiques Présentation : Eclipse est un environnement de développement intégré (IDE) largement utilisé qui prend non seulement en charge le développement de plusieurs langages de programmation, mais prend également en charge plusieurs systèmes d'exploitation. Cependant, parfois lors de l'utilisation d'Eclipse, nous pouvons rencontrer le problème des caractères chinois tronqués, ce qui gêne notre travail de développement. Cet article présentera quelques techniques pratiques pour nous aider à résoudre rapidement le problème des caractères chinois tronqués dans Eclipse et joindra des exemples de code spécifiques. un,

Une méthode efficace pour résoudre rapidement les caractères chinois tronqués de matplotlib Introduction : matplotlib est une bibliothèque de dessins couramment utilisée en Python. Cependant, lors de l'utilisation du chinois pour l'annotation et l'affichage, des caractères tronqués apparaissent souvent. Cet article présentera quelques solutions de contournement efficaces et fournira des exemples de code spécifiques. 1. Définir la police matplotlib utilise la police système pour l'affichage chinois par défaut, mais la police système ne contient souvent pas de caractères chinois, vous devez donc définir manuellement la police chinoise appropriée. Tout d'abord, vous devez confirmer si l'ordinateur a
