当前位置:首页 > PHP教程 > php应用 > 列表

PHP中文文件名输出乱码解决方法

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-21 15:13:32 浏览: 评论:0 

在php中碰到中文文件名乱码一般都是初学者了,因为我们一般不会使用中文文名了,因为大家都知道php对中文支持不友好,那么我们要如何解决php中文文件名乱码问题呢?下面小编给各位整理了一些方法,下面一起来看看.

原因是编码问题,所以要转码,用户PHP里面的 iconv 函数就可以解决:

iconv(“当前使用的编码如:utf-8″,”要转换的编码如:GB2312″,”文件名”);

php实例代码如下:

  1. $file_name="我的文件.jpg"
  2. $file_name=iconv("utf-8","gb2312",$file_name);   //解决中文乱码问题 
  3. echo '$file_name'
  4. 例子: 
  5. <?php 
  6. //执行创建中文名html文件 
  7. file_put_contents(PHPCMS_PATH.'test/'.iconv('UTF-8''GBK''中文名').'.html''xxxxxxxxxxx'); 
  8. ?> 

另一种解决中文乱码问题在于,代码如下:

  1. $sFileName = "sda.php"
  2. $sOriginalFileName = $sFileName
  3. $sExtension = s str($sFileName, (strrpos($sFileName'.') + 1));//找到扩展名 
  4. $sExtension = strtolower($sExtension); 
  5. $sFileName = date("YmdHis").rand(100, 200).".".$sExtension//这样就是我们的新文件名了,全数字的不会有乱码了。 
  6. //开源软件:phpfensi.com 

我们还可以使用urlencode来进行编译,如:urlencode('中文');例子代码如下:

  1. $file = "/tmp/中文名.tar.gz"
  2. $filename = basename($file); 
  3. header("Content-type: application/octet-stream"); 
  4. //处理中文文件名 
  5. $ua = $_SERVER["HTTP_USER_AGENT"]; 
  6. $encoded_filename = urlencode($filename); 
  7. $encoded_filename = str_replace("+""%20"$encoded_filename); 
  8. if (preg_match("/MSIE/"$ua)) { 
  9.  header('Content-Disposition: attachment; filename="' . $encoded_filename . '"'); 
  10. else if (preg_match("/Firefox/"$ua)) { 
  11.  header("Content-Disposition: attachment; filename*="utf8''" . $filename . '"'); 
  12. else { 
  13.  header('Content-Disposition: attachment; filename="' . $filename . '"'); 
  14. header('Content-Disposition: attachment; filename="' . $filename . '"'); 
  15. header("Content-Length: "filesize($file)); 
  16. readfile($file); 

注意:我的服务器是windows xp、apache,估计xp字符集是gbk,因为我的php代码保存为utf-8格式的,在给文件名命名时会出现乱码的情况,所以可以用iconv()函数将原本的utf-8格式的文件名转换为gbk格式的.

Tags: php中文乱码 php乱码方法

分享到: