这里有新鲜出炉的 PHP 面向对象编程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
下面小编就为大家带来一篇浅谈 php 中 fopen 不能创建中文文件名文件的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
之前网页的 chartset 用的是 utf-8,文件也用 utf-8,然后用 fopen() 创建一个中文文件名的文件时问题就出来了,文件名都是乱 码!
查看了很多文档试了不少方法都解决不了,本来想着用别的方法绕过这个问题,忽然脑子里闪过 Windows 默认的文字编码是 ansi,然后再 baidu 了一下,证实了这点,所以我的网页也应该是 ansi 编码才能使创建的文件名不会是乱码。
接着就着手验证,把网页都用 ansi 保存,去掉 chartset 语句,果然 ok 了,但是网页的内容就成乱码了,后来想起,这个网页还 include 了别的网页,把 include 的网页也改成 ansi 保存,哈哈万事 ok
编程这个工作真的很靠积累,如果我以前没看过 Windows 默认编码是 ansi,那这个问题就不知何年何月才能解决了
ps:<meta content ="text/html; charset=utf-8"http -equiv ="Content-type"> 这个 meta 标记一定要放在
后来又想到了一个更好的解决方法,网页还是用 utf-8 编码和保存,只是 fopen()里的文件名参 数单独给它编下码就行,php 有 iconv() 这个改换编码的程序,把 utf-8 转成 gb2312 就可以避免中文文件名为乱码了
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 "创建成功!";
- ?>
以上这篇浅谈 php 中 fopen 不能创建中文文件名文件的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 PHPERZ。
来源: http://www.phperz.com/article/17/0813/340625.html