この記事では、PHP で fopen が中国語のファイル名でファイルを作成できない問題を主に紹介します。興味のある方はぜひ参考にしてください。
以前、ウェブページのチャートセットはutf-8を使用しており、ファイルもutf-8を使用していましたが、fopen()を使用して中国語のファイル名を持つファイルを作成すると、ファイル名がすべて文字化けしてしまいました。 !
多くのドキュメントを確認し、多くの方法を試しましたが、解決できませんでした。他の方法を使用してこの問題を回避しようと考えていましたが、Windows のデフォルトのテキストエンコーディングが ansi であることに突然気づきました。 Baidu でこれを確認したため、作成されたファイル名が文字化けしないように、Web ページも ANSI エンコードする必要があります。
その後、検証を開始し、Web ページを ansi に保存し、chartset ステートメントを削除しました。問題はありませんでしたが、後でこの Web ページに他の Web ページも含まれていることを思い出したので、含まれている Web ページを変更しました。 ansi で保存します、笑すべて問題ありません
プログラミングは本当に積み重ねに依存する仕事です。Windows のデフォルトのエンコーディングが ansi であることをこれまで知らなかったら、どれくらい時間がかかるかわかりません。この問題を解決するには
ps: < メタコンテンツ ="text/html; charset=utf-8" http -equiv ="Content-type" > の前に配置する必要があります。 ;title> を有効にするには
その後、Web ページは引き続き UTF-8 でエンコードされて保存されます。fopen() のファイル名パラメーターを個別にエンコードするだけです。 )、utf-8 を gb2312 に変換するプログラムは、中国語のファイル名の文字化けを回避できます<!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>
<?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 "创建成功!";
?>
関連する推奨事項:
関数の紹介と使用法の詳細な説明
php fopen()とfile_get_contents()の詳細な説明
以上がphpのfopenで中国語のファイル名でファイルが作成できない問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。