浅谈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中ADODB类详解
Mar 25 PHP
php HtmlReplace输入过滤安全函数
Jul 03 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
Jun 21 PHP
php利用curl抓取新浪微博内容示例
Apr 27 PHP
thinkphp模板输出技巧汇总
Nov 24 PHP
PHP文件读取功能的应用实例
May 08 PHP
php 流程控制switch的简单实例
Jun 07 PHP
PHP简单遍历对象示例
Sep 28 PHP
实例讲解PHP中使用命名空间
Jan 27 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 PHP
PHP设计模式入门之状态模式原理与实现方法分析
Apr 26 PHP
Laravel中获取IP的真实地理位置
Apr 01 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下使用strpos需要注意 === 运算符
2010/07/17 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
2013/12/13 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
基于dataset的使用和图片延时加载的实现方法
2017/12/11 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
python写的一个squid访问日志分析的小程序
2014/09/17 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
自荐信不宜过于夸大
2013/11/06 职场文书
大学生毕业自我评价范文分享
2013/11/07 职场文书
预备党员公开承诺书
2014/05/28 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
2015党建工作简报
2015/07/21 职场文书
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技