Heim Backend-Entwicklung PHP-Tutorial php上传中文文件名乱码问题处理方案_php实例

php上传中文文件名乱码问题处理方案_php实例

Jun 07, 2016 pm 05:14 PM
中文乱码

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函数。
吐槽一下,尽量不使用中文文件名作为服务器上保存的文件名,请将文件名转化成自己的文件名(即使是英文文件名也请转化一下)。

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Methoden zur Lösung des Problems verstümmelter chinesischer Zeichen in PHP Dompdf Methoden zur Lösung des Problems verstümmelter chinesischer Zeichen in PHP Dompdf Mar 05, 2024 pm 03:45 PM

Methoden zur Lösung des chinesischen verstümmelten Problems von PHPDompdf PHPDompdf ist ein Tool zum Konvertieren von HTML-Dokumenten in PDF-Dateien. Es ist leistungsstark und einfach zu verwenden. Allerdings stößt man bei der Verarbeitung chinesischer Inhalte manchmal auf das Problem verstümmelter chinesischer Schriftzeichen. In diesem Artikel werden einige Methoden zur Lösung des Problems verstümmelter chinesischer Zeichen in PHPDompdf vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Bei der Verwendung von Schriftartdateien zur Verarbeitung chinesischer Inhalte besteht ein häufiges Problem darin, dass Dompdf standardmäßig keine chinesischen Inhalte unterstützt.

Die ultimative Lösung für das Problem der verstümmelten chinesischen Zeichen in PyCharm Die ultimative Lösung für das Problem der verstümmelten chinesischen Zeichen in PyCharm Jan 27, 2024 am 08:00 AM

Die ultimative Methode zur Lösung des Problems verstümmelter chinesischer Zeichen in PyCharm erfordert spezifische Codebeispiele. Einführung: PyCharm ist eine häufig verwendete integrierte Entwicklungsumgebung (IDE) für Python und verfügt über leistungsstarke Funktionen und eine benutzerfreundliche Benutzeroberfläche Mehrheit der Entwickler. Wenn PyCharm jedoch chinesische Zeichen verarbeitet, kann es manchmal zu verstümmelten Zeichen kommen, was zu bestimmten Problemen bei der Entwicklung und beim Debuggen führt. In diesem Artikel wird vorgestellt, wie das chinesische verstümmelte Problem in PyCharm gelöst werden kann, und es werden spezifische Codebeispiele gegeben. 1. Richten Sie das Projekt ein

Häufige Ursachen und Lösungen für verstümmelte chinesische Zeichen bei der MySQL-Installation Häufige Ursachen und Lösungen für verstümmelte chinesische Zeichen bei der MySQL-Installation Mar 02, 2024 am 09:00 AM

Häufige Gründe und Lösungen für verstümmelte chinesische Zeichen bei der MySQL-Installation MySQL ist ein häufig verwendetes relationales Datenbankverwaltungssystem. Bei der Verwendung kann es jedoch zu Problemen mit verstümmelten chinesischen Zeichen kommen, die Entwicklern und Systemadministratoren Probleme bereiten. Das Problem verstümmelter chinesischer Zeichen wird hauptsächlich durch falsche Zeichensatzeinstellungen, inkonsistente Zeichensätze zwischen dem Datenbankserver und dem Client usw. verursacht. In diesem Artikel werden die häufigsten Ursachen und Lösungen für verstümmelte chinesische Zeichen bei der MySQL-Installation ausführlich vorgestellt, um allen zu helfen, dieses Problem besser zu lösen. 1. Häufige Gründe: Zeichensatzeinstellung

Was tun, wenn Ajax verstümmelte chinesische Zeichen überträgt? Was tun, wenn Ajax verstümmelte chinesische Zeichen überträgt? Nov 15, 2023 am 10:42 AM

Lösungen für die Ajax-Übertragung verstümmelter chinesischer Zeichen: 1. Legen Sie eine einheitliche Codierungsmethode fest. 3. Clientseitige Decodierung. 5. Verwenden Sie das JSON-Format. Detaillierte Einführung: 1. Legen Sie eine einheitliche Codierungsmethode fest, um sicherzustellen, dass der Server und der Client dieselbe Codierungsmethode verwenden. Unter normalen Umständen ist UTF-8 eine häufig verwendete Codierungsmethode, da es mehrere Sprachen und Zeichensätze unterstützen kann. 2. Serverseitige Codierung: Stellen Sie sicher, dass die chinesischen Daten mit der richtigen Codierungsmethode codiert und dann an den Client usw. übergeben werden.

Was soll ich tun, wenn die PHP-Webseite verstümmelte chinesische Zeichen enthält? Eine Komplettlösung Was soll ich tun, wenn die PHP-Webseite verstümmelte chinesische Zeichen enthält? Eine Komplettlösung Mar 26, 2024 pm 03:27 PM

Das Problem verstümmelter chinesischer Zeichen in PHP-Webseiten besteht darin, dass chinesische Zeichen in der Webseitenanzeige als verstümmelte Zeichen angezeigt werden. Diese Situation wird normalerweise durch eine inkonsistente Codierung verursacht oder der Zeichensatz ist nicht festgelegt. Um das Problem der verstümmelten chinesischen Zeichen in PHP-Webseiten zu lösen, müssen viele Aspekte berücksichtigt werden. Im Folgenden finden Sie einige gängige Lösungen und spezifische Codebeispiele. Legen Sie die PHP-Dateikodierung fest: Stellen Sie zunächst sicher, dass die Kodierung der PHP-Datei selbst UTF-8 ist. Sie können die UTF-8-Kodierung beim Speichern im Editor festlegen oder den folgenden Code zum festzulegenden Header der PHP-Datei hinzufügen die Kodierung: &l

Methoden zur Lösung des Problems verstümmelter chinesischer Zeichen im Linux-System Methoden zur Lösung des Problems verstümmelter chinesischer Zeichen im Linux-System Feb 19, 2024 am 09:22 AM

Das Problem der verstümmelten chinesischen Linux-Zeichen ist ein Problem, auf das viele chinesische Benutzer bei der Verwendung von Linux-Systemen häufig stoßen. Der Hauptgrund für verstümmelte chinesische Schriftzeichen liegt darin, dass die vom Linux-System standardmäßig verwendete Zeichenkodierung UTF-8 ist, einige Software oder Anwendungen jedoch möglicherweise nicht mit der UTF-8-Kodierung kompatibel sind, was dazu führt, dass chinesische Schriftzeichen nicht korrekt angezeigt werden. Es gibt viele Möglichkeiten, dieses Problem zu lösen. Im Folgenden werden einige gängige Lösungen beschrieben und spezifische Codebeispiele bereitgestellt. Ändern Sie die Zeichenkodierungseinstellungen des Terminals: Die Zeichenkodierungseinstellungen des Terminals bestimmen, ob das Terminal korrekt funktioniert

Eine praktische Methode, um das Problem verstümmelter chinesischer Zeichen in Eclipse effektiv zu lösen Eine praktische Methode, um das Problem verstümmelter chinesischer Zeichen in Eclipse effektiv zu lösen Jan 03, 2024 pm 05:50 PM

Praktische Tipps zum schnellen Lösen chinesischer verstümmelter Zeichen in Eclipse erfordern spezifische Codebeispiele. Übersicht: Eclipse ist eine weit verbreitete integrierte Entwicklungsumgebung (IDE), die nicht nur die Entwicklung mehrerer Programmiersprachen, sondern auch mehrere Betriebssysteme unterstützt. Bei der Verwendung von Eclipse kann es jedoch manchmal vorkommen, dass wir auf das Problem verstümmelter chinesischer Zeichen stoßen, was zu Unannehmlichkeiten für unsere Entwicklungsarbeit führt. In diesem Artikel werden einige praktische Techniken vorgestellt, die uns helfen, das Problem der verstümmelten chinesischen Zeichen in Eclipse schnell zu lösen, und spezifische Codebeispiele angehängt werden. eins,

Effektive Methode zur Lösung des verstümmelten chinesischen Matplotlib-Problems Effektive Methode zur Lösung des verstümmelten chinesischen Matplotlib-Problems Jan 13, 2024 am 11:03 AM

Eine effektive Methode, um verstümmelte chinesische Matplotlib-Zeichen schnell zu lösen: Matplotlib ist eine häufig verwendete Zeichenbibliothek in Python. Bei der Verwendung von Chinesisch für Anmerkungen und Anzeige treten jedoch häufig verstümmelte Zeichen auf. In diesem Artikel werden einige effektive Problemumgehungen vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Legen Sie die Schriftart fest. Standardmäßig verwendet matplotlib Systemschriftarten für die chinesische Anzeige. Allerdings enthalten Systemschriftarten häufig keine chinesischen Zeichen, sodass Sie die entsprechende chinesische Schriftart manuell festlegen müssen. Zuerst müssen Sie bestätigen, ob der Computer dies getan hat

See all articles