Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung des Problems, dass fopen in PHP keine Dateien mit chinesischen Dateinamen erstellen kann

Ausführliche Erklärung des Problems, dass fopen in PHP keine Dateien mit chinesischen Dateinamen erstellen kann

墨辰丷
墨辰丷Original
2018-05-26 14:23:521424Durchsuche

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 es 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 ist immer noch in utf-8 kodiert und gespeichert, aber kodieren Sie den Dateinamenparameter einfach separat in fopen(). PHP verfügt über iconv(), ein Programm, das die Kodierung von utf-8 in gb2312 ändert, Sie können verstümmelte chinesische Dateinamen vermeiden

test.htm

<!DOCTYPE html>
<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, er wird für das Studium aller hilfreich sein.


Verwandte Empfehlungen:

So ändern Sie Dateinamen in PHP stapelweise

Beispiel für die von Python implementierte Funktion zum Suchen von Datendateien basierend auf Dateinamen

Python liest Dateinamen Rufen Sie die Methode zum Generieren einer Liste auf

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung des Problems, dass fopen in PHP keine Dateien mit 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