Heim  >  Artikel  >  Backend-Entwicklung  >  Das Problem, dass fopen in PHP keine Datei mit einem chinesischen Dateinamen erstellen kann

Das Problem, dass fopen in PHP keine Datei mit einem chinesischen Dateinamen erstellen kann

墨辰丷
墨辰丷Original
2018-05-26 10:21:021756Durchsuche

Dieser Artikel stellt hauptsächlich das Problem vor, dass fopen in PHP keine Dateien mit chinesischen Dateinamen erstellen kann. Ich hoffe, dass es für alle hilfreich ist.

Der Chartsatz der vorherigen Webseite verwendete utf-8, und die Datei verwendete auch utf-8. Dann trat das Problem auf, als mit fopen() eine Datei mit einem chinesischen Dateinamen erstellt wurde war alles verstümmelt!

Ich habe viele Dokumente überprüft und viele Methoden ausprobiert, konnte es aber nicht lösen. Ich dachte darüber nach, andere Methoden zu verwenden, um dieses Problem zu umgehen, aber plötzlich fiel mir ein, dass die Standardtextkodierung von Windows Ansi ist , und dann habe ich erneut gesucht und bestätigt. Um dies zu verstehen, sollte meine Webseite auch ansi-codiert sein, damit der erstellte Dateiname nicht verstümmelt wird.

Dann habe ich mit der Überprüfung begonnen, die Webseite mit ANSI gespeichert und die Chartset-Anweisung entfernt. Es war in Ordnung, aber der Inhalt der Webseite war verstümmelt. Später fiel mir ein, dass diese Webseite auch andere Webseiten enthielt Das Include wurde geändert. Die Webseite wurde auch zum Speichern auf Ansi geändert, haha, alles ist in Ordnung.

Programmieren ist wirklich ein Job, der auf Akkumulation beruht. Wenn ich noch nie gesehen hätte, dass die Standardcodierung von Windows Ansi ist, dann ist dieses Problem im Handumdrehen gelöst.

ps: 01e1ffbd077d89fb7f7fd0818b0f5d99 Dieses Meta-Tag muss vor b2386ffb911b14667cb8f0f91ea547a76e916e0f7d1e588d4f442bf645aedb2f platziert werden, um wirksam zu sein.

Später habe ich mir eine bessere Lösung überlegt. Die Webseite steht still codiert und gespeichert in utf-8, aber codieren Sie den Dateinamenparameter einfach separat in fopen(). PHP verfügt über iconv(), ein Programm, das die Codierung ändert. Durch die Konvertierung von utf-8 in gb2312 können Sie verstümmelte chinesische Dateinamen vermeiden 🎜>

test.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>标题:{title}</title>
</head>
<body>
<b>此新闻的内容:</b>{content}
</body>
</html>

test.php

<?php

  //实际应用中很可能是查询数据库取内容。
  $rows = array(array("替换标题1","替换内容1"),array("替换标题2","替换内容2"));
  $filename = "tmp.htm";
  foreach($rows as $id => $val){
    $title = $val[0];
    $content = $val[1];
    $pagename = "测试".$id.".html"; 
    //对文件名的编码,避免中文文件名乱码
    $pagename = iconv("UTF-8", "GBK", $pagename); 
    
    //读取模板
    $tmpfile = fopen($filename,"r");
    $string = fread($tmpfile,filesize($filename));
    $string = str_replace("{title}",$title,$string);
    $string = str_replace("{content}",$content,$string);
    fclose($tmpfile);
    //写新文件
    $newpage = fopen($pagename,"w");
    fwrite($newpage,$string);
    fclose($newpage);
    
  }
  echo "创建成功!";
?>

Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.


Verwandte Empfehlungen:

fopenDetaillierte Einführung und Verwendung der Funktion

Detaillierte Erklärung des Unterschieds zwischen PHP fopen() und file_get_contents()

10 empfohlene Inhalte für die Funktion fopen

Das obige ist der detaillierte Inhalt vonDas Problem, dass fopen in PHP keine Datei mit einem chinesischen Dateinamen erstellen kann. 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