Home > Article > Backend Development > The problem that fopen in php cannot create a file with a Chinese file name
This article mainly introduces the problem that fopen in PHP cannot create files with Chinese file names. Interested friends can refer to it. I hope it will be helpful to everyone.
The chartset of the previous web page used utf-8, and the file also used utf-8. Then the problem came out when using fopen() to create a file with a Chinese file name. The file names were all garbled!
I checked a lot of documents and tried many methods but couldn't solve it. I was originally thinking of using other methods to bypass this problem, but suddenly it occurred to my mind that the default text encoding of Windows is ansi, and then I searched again and confirmed it. In order to understand this, my web page should also be ansi encoded so that the created file name will not be garbled.
Then I started to verify. I saved the webpages with ansi and removed the chartset statement. It was ok, but the content of the webpage became garbled. Later I remembered that this webpage also included other webpages, so I changed the include The webpage has also been changed to ansi to save, haha everything is ok
Programming is really a job that relies on accumulation. If I had never seen that the default encoding of Windows is ansi, then this problem will not be solved in a long time
ps:f12967df63443ea537a7297ed50f8542 This meta tag must be placed before b2386ffb911b14667cb8f0f91ea547a76e916e0f7d1e588d4f442bf645aedb2f to be effective
Later I thought of a better solution. The webpage is still encoded and saved in utf-8, but Just encode the file name parameter in fopen() separately. PHP has iconv(), a program that changes the encoding. By converting utf-8 to gb2312, you can avoid garbled Chinese file names.
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 "创建成功!"; ?>
The above is the entire content of this article, I hope it will be helpful to everyone's study.
Related recommendations:
fopenFunction introduction and detailed explanation of how to use
phpfopen() and file_get_contents() The difference is explained in detail
fopen10 recommended content for the function
The above is the detailed content of The problem that fopen in php cannot create a file with a Chinese file name. For more information, please follow other related articles on the PHP Chinese website!