Home  >  Article  >  Backend Development  >  The problem that fopen in php cannot create a file with a Chinese file name

The problem that fopen in php cannot create a file with a Chinese file name

墨辰丷
墨辰丷Original
2018-05-26 10:21:021711browse

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

php

fopen() 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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn