Wenn Sie PHP zum Hochladen von Dateien verwenden und der Dateiname chinesische Zeichen enthält, schlägt der Upload möglicherweise fehl. Dies liegt daran, dass im HTTP-Protokoll die chinesischen Zeichen im Dateinamen kodiert werden müssen, um korrekt übertragen zu werden, und PHP diese Kodierung standardmäßig nicht durchführt, was dazu führt, dass der Upload fehlschlägt.
Lassen Sie uns nun besprechen, wie Sie dieses Problem lösen können.
Wenn wir PHP zum Hochladen von Dateien verwenden und der hochgeladene Dateiname chinesische Zeichen enthält, wird beim Hochladen möglicherweise ein Fehler gemeldet. Die Fehlermeldung besteht normalerweise aus einigen unverständlichen, verstümmelten Zeichen, und die Ursache des Fehlers kann nicht liegen deutlich darauf hingewiesen.
Zum Beispiel versuchen wir, eine Datei mit dem Namen „Testbild.jpg“ hochzuladen. Wenn der Dateiname während des Upload-Vorgangs chinesische Zeichen wie „Testbild (Chinesisch).jpg“ enthält, schlägt der Upload möglicherweise fehl und ein Die Fehlermeldung wird wie folgt gemeldet:
rrreeSie können sehen, dass der Dateiname in der Fehlermeldung verstümmelt ist und die Fehlerursache nicht eindeutig angegeben werden kann.
Der Grund für dieses Problem ist, dass im HTTP-Protokoll chinesische Zeichen codiert werden müssen, um korrekt übertragen zu werden. Wenn Sie PHP zum Hochladen von Dateien verwenden, konvertiert PHP den Namen der hochgeladenen Datei standardmäßig in das ISO-8859-1-Kodierungsformat. Chinesische Zeichen sind in der ISO-8859-1-Kodierung nicht enthalten, sodass verstümmelte Zeichen angezeigt werden.
Wenn wir uns die hochgeladene HTTP-Anfrage ansehen, können wir sehen, dass der hochgeladene Dateiname so lautet:
Warning: move_uploaded_file(): Unable to move '/tmp/php12efan' to '/var/www/html/upload/测试图片(中文).jpg'
Sie können sehen, dass der hochgeladene Dateiname in keiner Weise verschlüsselt ist.
Es gibt viele Möglichkeiten, dieses Problem zu lösen. Wir bieten hier zwei gängige Lösungen.
Wir können die Kodierung des hochgeladenen Dateinamens manuell konvertieren, um den richtigen Dateinamen zu erhalten. Der spezifische Vorgang ist wie folgt:
Content-Disposition: form-data; name="file"; filename="测试图片(中文).jpg"
Im obigen Code verwenden wir die Funktion iconv
, um den Dateinamen von der UTF-8-Kodierung in die ISO-8859-1-Kodierung zu konvertieren und den richtigen Dateinamen zu erhalten und dann Datei-Upload durchführen. Der Nachteil dieser Methode besteht darin, dass sie relativ umständlich ist und eine manuelle Kodierungskonvertierung erfordert, was nicht praktisch genug ist. iconv
函数将文件名从UTF-8编码转换为ISO-8859-1编码,得到了正确的文件名,然后再进行文件上传。这种方法的缺点是比较繁琐,需要手动进行编码转换,不够方便。
我们可以修改PHP配置文件,让PHP自动进行编码转换,从而避免了手动编码转换的过程。具体操作如下:
打开php.ini文件,找到以下两行:
$file = $_FILES['file']; $filename = iconv('UTF-8', 'ISO-8859-1', $file['name']); move_uploaded_file($file['tmp_name'], '/var/www/html/upload/' . $filename);
在; Default charset for auto content type.
这一行的后面添加以下内容:
; Default charset for auto content type. ; http://php.net/default-charset default_charset = "UTF-8"
通过以上操作,我们就成功修改了PHP的配置文件,让PHP自动进行编码转换,解决了上传带中文的图片报错的问题。这种方法比较方便,但是需要注意的是,在使用此方法之前,需要确保服务器上已经安装了Suhosin
; 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
; Default charset for auto content type.
hinzu Der folgende Inhalt: 🎜rrreeeSuhosin
auf dem Server installiert wurde. 🎜🎜Zusammenfassung🎜🎜Wenn Sie PHP zum Hochladen von Dateien verwenden und der Name der hochgeladenen Datei chinesische Zeichen enthält, kann es zu einem Upload-Fehler kommen. Um dieses Problem zu lösen, können Sie die Kodierungskonvertierung manuell durchführen oder die PHP-Konfigurationsdatei ändern und PHP die Kodierungskonvertierung automatisch durchführen lassen. Beide Methoden haben ihre eigenen Vor- und Nachteile, und Sie können die geeignete Methode zur Lösung des Problems auswählen tatsächliche Situation. 🎜Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn ich beim Hochladen von Bildern mit chinesischen Schriftzeichen in PHP eine Fehlermeldung erhalte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!