Heim  >  Artikel  >  Backend-Entwicklung  >  Was soll ich tun, wenn ich beim Hochladen von Bildern mit chinesischen Schriftzeichen in PHP eine Fehlermeldung erhalte?

Was soll ich tun, wenn ich beim Hochladen von Bildern mit chinesischen Schriftzeichen in PHP eine Fehlermeldung erhalte?

PHPz
PHPzOriginal
2023-04-11 09:16:11641Durchsuche

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.

Symptome des Problems

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:

rrree

Sie können sehen, dass der Dateiname in der Fehlermeldung verstümmelt ist und die Fehlerursache nicht eindeutig angegeben werden kann.

Der Grund für das Problem

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.

Lösung

Es gibt viele Möglichkeiten, dieses Problem zu lösen. Wir bieten hier zwei gängige Lösungen.

Option 1: Manuelle Kodierungskonvertierung

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自动进行编码转换,从而避免了手动编码转换的过程。具体操作如下:

  1. 找到php.ini配置文件,位置可能会因不同系统而有所不同。
  2. 打开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);
  3. ; Default charset for auto content type.这一行的后面添加以下内容:

    ; Default charset for auto content type. 
    ; http://php.net/default-charset 
    default_charset = "UTF-8"
  4. 保存php.ini文件,重启Web服务器。

通过以上操作,我们就成功修改了PHP的配置文件,让PHP自动进行编码转换,解决了上传带中文的图片报错的问题。这种方法比较方便,但是需要注意的是,在使用此方法之前,需要确保服务器上已经安装了Suhosin

Option 2: PHP-Konfigurationsdatei ändern

Wir können die PHP-Konfigurationsdatei ändern und PHP die Kodierungskonvertierung automatisch durchführen lassen, wodurch der Prozess der manuellen Kodierungskonvertierung vermieden wird. Die spezifischen Vorgänge sind wie folgt:

  1. Suchen Sie die Konfigurationsdatei php.ini. Der Speicherort kann je nach System variieren.
  2. Öffnen Sie die Datei php.ini und suchen Sie nach den folgenden zwei Zeilen: 🎜
    ; 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
  3. 🎜Fügen Sie nach der Zeile ; Default charset for auto content type. hinzu Der folgende Inhalt: 🎜rrreee
  4. Speichern Sie die php.ini-Datei und starten Sie den Webserver neu.
🎜Durch die oben genannten Vorgänge haben wir die PHP-Konfigurationsdatei erfolgreich geändert, sodass PHP die Kodierungskonvertierung automatisch durchführen kann, und das Fehlerproblem beim Hochladen von Bildern mit chinesischen Schriftzeichen gelöst. Diese Methode ist bequemer, es sollte jedoch beachtet werden, dass Sie vor der Verwendung dieser Methode sicherstellen müssen, dass die Erweiterung Suhosin 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!

Stellungnahme:
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