Heim >Backend-Entwicklung >PHP-Problem >Was tun, wenn der Dateiname der heruntergeladenen PHP-Datei verstümmelt ist?
Lösung für verstümmelte Dateinamen beim Herunterladen von PHP-Dateien: 1. Setzen Sie „Content-Type“ auf „application/octet-stream“ 2. Setzen Sie „header('Content-Disposition: attachment; filename*="utf8'' ' . $filename . '"');} else {header(...)".
Die Betriebsumgebung dieses Tutorials: Windows 7-System, PHP-Version 8.1, Dell G3-Computer.
Was tun, wenn der Name der PHP-Download-Datei verstümmelt ist?
Der Name der PHP-Download-Datei ist verstümmelt
Durch die Einstellung des Inhaltstyps auf Anwendung/Oktett-Stream kann der dynamisch generierte Inhalt als Datei heruntergeladen werden . Ich glaube das an alle Städte. Verwenden Sie dann Content-Disposition, um den Namen der heruntergeladenen Datei festzulegen. Viele Leute wissen das. Grundsätzlich ist das Download-Programm so geschrieben:
Der Code lautet wie folgt:
$filename = "document.txt"; header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $filename); print "Hello!";
Nachdem Sie es mit einem Browser geöffnet haben, können Sie document.txt herunterladen.
Wenn $filename jedoch UTF-8-codiert ist, können einige Browser damit nicht richtig umgehen. Ändern Sie beispielsweise das obige Programm leicht:
Der Code lautet wie folgt:
$filename = "中文 文件名.txt"; header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $filename); print "Hello!";
Speichern Sie das Programm in UTF-8-Kodierung und greifen Sie erneut darauf zu. Der vom IE6 heruntergeladene Dateiname wird verstümmelt. Der unter FF3 heruntergeladene Dateiname enthält nur das Wort „Chinesisch“. Unter Opera 9 funktioniert alles einwandfrei.
Der Ausgabeheader sieht tatsächlich so aus:
Content-Disposition: attachment; filename=Chinese file name.txt Tatsächlich sollte die mehrsprachige Codierung Content-Disposition gemäß der Definition von RFC2231 wie folgt definiert werden:
Der Code lautet wie folgt:
Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"
Das heißt:
Fügen Sie vor dem Gleichheitszeichen nach
Dateiname * hinzu.
Der Wert des Dateinamens ist in drei Segmente mit einfachen Anführungszeichen unterteilt: Zeichensatz (utf8) und Sprache (leer) und URL-codierter Dateiname.
Es ist am besten, doppelte Anführungszeichen hinzuzufügen, da sonst der Teil nach den Leerzeichen im Dateinamen in Firefox nicht angezeigt wird.
Beachten Sie, dass das Ergebnis von urlencode nicht mit dem Ergebnis der urlencode-Funktion von PHP übereinstimmt die Leerzeichen mit + und Dies muss durch %20 ersetzt werden
Nach dem Testen wurde festgestellt, dass die Unterstützung mehrerer Mainstream-Browser wie folgt aussieht:
IE6 attachment; filename="" FF3 attachment; filename="UTF-8文件名" attachment; filename*="utf8''" O9 attachment; filename="UTF-8文件名"
Safari3 (Win) scheint dies nicht zu unterstützen? Keine der oben genannten Methoden wird funktionieren
Es scheint, dass das Programm so geschrieben sein muss, um alle gängigen Browser zu unterstützen:
PHP Video Tutorial🎜“🎜Das obige ist der detaillierte Inhalt vonWas tun, wenn der Dateiname der heruntergeladenen PHP-Datei verstümmelt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!