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

 更新时间:2017年7月6日 23:49  点击:1492
php中fopen不能创建中文文件名文件怎么办?本文详细介绍了浅谈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标记一定要放在<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>

<metacontent="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($rowsas$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获取指定数量随机字符串的方法,非常实用,有兴趣的同学快来看看吧。

本文实例讲述了php获取指定数量随机字符串的方法。分享给大家供大家参考,具体如下:

 代码如下复制代码

functiongetARandLetter($number= 1) {

  if($number== 0)

    returnFALSE;//去除0

  $number=$number< 0 ? -$number:$number;//如果小于零取正值

  $letterArr=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

  $returnStr=''

  for($i= 0;$i<$number;$i++) {

    $returnStr.=$letterArr[rand ( 0, 51 )];

  }

  return$returnStr;

}

echogetARandLetter(8);

运行结果:lUJfScvS

小编推荐的这篇文章介绍了php在linux中可能用到的命令,非常实用,有兴趣的同学快来看看吧。

如下所示:

php -i | grep php.ini    查找php.ini的位置

php-cgi -b 127.0.0.1:9000 &  查看php-cgi进程

小编推荐的这篇文章介绍了PHP中使用OpenSSL生成证书及加密解密,非常实用,有兴趣的同学快来参考一下吧。

依赖于OpenSSL扩展

 代码如下复制代码

/*加密解密*/

functionauthcode($string,$operation='E') {

  $ssl_public=file_get_contents(DATA_PATH."/conf/cert_public.key");

  $ssl_private=file_get_contents(DATA_PATH."/conf/cert_private.pem");

  $pi_key= openssl_pkey_get_private($ssl_private);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id

  $pu_key= openssl_pkey_get_public($ssl_public);//这个函数可用来判断公钥是否是可用的

  if(false == ($pi_key||$pu_key))return'证书错误';

  $data="";

  if($operation=='D'){

    openssl_private_decrypt(base64_decode($string),$data,$pi_key);//私钥解密

  }else{

    openssl_public_encrypt($string,$data,$pu_key);//公钥加密

    $data=base64_encode($data);

  }

  return$data;

}

/*生成证书*/

functionexportOpenSSLFile(){

  $config=array(

    "digest_alg"   =>"sha512",

    "private_key_bits"=> 4096,          //字节数  512 1024 2048  4096 等

    "private_key_type"=> OPENSSL_KEYTYPE_RSA,  //加密类型

  );

  $res= openssl_pkey_new($config);

  if($res== false)returnfalse;

  openssl_pkey_export($res,$private_key);

  $public_key= openssl_pkey_get_details($res);

  $public_key=$public_key["key"];

  file_put_contents(DATA_PATH."/conf/cert_public.key",$public_key);

  file_put_contents(DATA_PATH."/conf/cert_private.pem",$private_key);

  openssl_free_key($res);

}

[!--infotagslink--]

相关文章

  • js URLdecode()与urlencode方法支持中文解码

    下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20
  • cmd下过滤文件名称的两种方法

    这篇文章主要介绍了cmd下过滤文件名称的两种方法,需要的朋友可以参考下...2020-06-30
  • 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。首先:用show variables like “%colla%”;show varables like “%char%”;这两条...2015-11-24
  • C#读取中文文件出现乱码的解决方法

    这篇文章主要介绍了C#读取中文文件出现乱码的解决方法,涉及C#中文编码的操作技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • Mysql在debian系统中不能插入中文的终极解决方案

    在debian环境下,彻底解决mysql无法插入和显示中文的问题Linux下Mysql插入中文显示乱码解决方案mysql -uroot -p 回车输入密码进入mysql查看状态如下:默认的是客户端和服务器都用了latin1,所以会乱码。解决方案:mysql>use...2013-10-04
  • linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
  • Java连接数据库oracle中文乱码解决方案

    这篇文章主要介绍了Java连接数据库oracle中文乱码解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-16
  • 使用GetInvalidFileNameChars生成文件名

    这篇文章主要介绍了一个很实用的函数Path.GetInvalidFileNameChars(),他可以很方便的生成一个有效的文件名称...2020-06-25
  • FlashFXP连接站点中文显示乱码解决办法

    FlashFXP是一款常用的服务器客户连接软件了,我们可以通过FlashFXP来上传或下载文件,但有一些朋友使用FlashFXP时碰到中文目录或文件名乱码问题,那么要如何来解决呢?具体就...2016-10-10
  • php中把unicode编码转化为中文

    小编在网上看到最多的就是汉字转换unicode编码了,今天我们看到一个反过来的操作就是把unicode转换成中文了,下面一起来看看 这两天帮别人开发微信平台好友板块,存...2016-11-25
  • php 判断是否是中文/英文/数字示例代码

    复制代码 代码如下: $str='asb天水市12'; if (preg_match("/^[/x7f-/xff]+$/", $str)){ echo '全部是汉字'; }else { echo '不全是汉字'; } /** PHP自带的判断是否是中文, eregi('[^/x00-/x7F]', $str ) //中文 ereg...2013-10-04
  • C#编程实现获取文件夹中所有文件的文件名

    这篇文章主要介绍了C#编程实现获取文件夹中所有文件的文件名,可实现获取特定目录下制定类型文件名称的功能,涉及C#针对文件与目录的遍历、查询等操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#中文件名或文件路径非法字符判断方法

    这篇文章主要介绍了C#中文件名或文件路径非法字符判断方法,本文主要使用了内置的GetInvalidFileNameChars方法实现非法字符判断,需要的朋友可以参考下...2020-06-25
  • php中文转换成拼音代码

    <?php教程 function cn2pinyin($_string, $_code='gb2312') { $_datakey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|b...2016-11-25
  • php 根据啊拉伯数字转变成大写中文数字

    // 原是是根据用户输入的数字判断再转换成想要的大写数字,如果我们先把大小写存在一个数组,再判断进行转换就OK了。 $data = $_POST['rmb']; if (!ereg("^[0-9.]",$dat...2016-11-25
  • js获取url页面id,也就是最后的数字文件名

    这篇文章主要介绍了js获取url页面id,也就是最后的数字文件名,有时候我们需要判断当前页面的id,又不用重新生成页面直接用js获取最后的数字.htm即可...2020-09-25
  • PHP把16进制的编码转为中文程序代码

    今天在做公司的项目的时候,遇到一个问题,群聊天记录存入数据库的时候把聊天记录及央视使用16进制转换,我在做将聊天记录导出为text文本的时候,需要将聊天记录先从16进制转...2016-11-25
  • 如何正确统计中文字数?

    PHP代码:-------------------------------------------------------------------------------- function ccStrLen($str) #计算中英文混合字符串的长度 { $ccLe...2016-11-25