浅谈php中fopen不能创建中文文件名文件的问题


Posted in PHP onFebruary 06, 2017

之前网页的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标记一定要放在<title></title>之前才有效的

后来又想到了一个更好的解决方法,网页还是用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不能创建中文文件名文件的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
谈谈PHP语法(3)
Oct 09 PHP
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
20个PHP常用类库小结
Sep 11 PHP
php selectradio和checkbox默认选择的实现方法详解
Jun 29 PHP
php多层数组与对象的转换实例代码
Aug 05 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
php使用codebase生成随机数
Mar 25 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
Mar 16 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
详解PHP PDO简单教程
May 28 PHP
PHP命名空间与自动加载机制的基础介绍
Aug 25 PHP
PHP 类与构造函数解析
Feb 06 #PHP
PHP在linux上执行外部命令的方法
Feb 06 #PHP
php获取指定数量随机字符串的方法
Feb 06 #PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 #PHP
PHP中使用OpenSSL生成证书及加密解密
Feb 05 #PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 #PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 #PHP
You might like
PHP执行linux系统命令的常用函数使用说明
2010/04/27 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
2014/12/05 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
[01:54]胎教DOTA2 准妈妈玩家现身中国区预选赛
2016/06/26 DOTA
Python3 操作符重载方法示例
2017/11/23 Python
python并发编程之线程实例解析
2017/12/27 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
django迁移文件migrations的实现
2020/03/31 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
怎样从/向数据文件读/写结构
2014/11/23 面试题
铭万公司.net面试题笔试题
2014/07/20 面试题
社会调查研究计划书
2014/05/01 职场文书
高中班级口号
2014/06/09 职场文书
妇女工作先进事迹
2014/08/17 职场文书
2014年体育工作总结
2014/11/24 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
高温慰问简报
2015/07/21 职场文书
党员理论学习心得体会
2016/01/21 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技