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

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

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

 代码如下 复制代码

$file_name="我的文件.jpg";
$file_name=iconv("utf-8","gb2312",$file_name);   //解决中文乱码问题
echo '$file_name';

例子

 代码如下 复制代码

<?php
//执行创建中文名html文件
file_put_contents(PHPCMS_PATH.'test/'.iconv('UTF-8', 'GBK', '中文名').'.html', 'xxxxxxxxxxx');

?>

另一种解决中文乱码问题在于

 代码如下 复制代码

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

我们还可以使用urlencode来进行编译

如  urlencode('中文');

例子

 代码如下 复制代码

$file = "/tmp/中文名.tar.gz";

$filename = basename($file);

header("Content-type: application/octet-stream");

//处理中文文件名
$ua = $_SERVER["HTTP_USER_AGENT"];
$encoded_filename = urlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);
if (preg_match("/MSIE/", $ua)) {
 header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
} else if (preg_match("/Firefox/", $ua)) {
 header("Content-Disposition: attachment; filename*="utf8''" . $filename . '"');
} else {
 header('Content-Disposition: attachment; filename="' . $filename . '"');
}

header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Content-Length: ". filesize($file));
readfile($file);

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

时间: 2024-09-20 16:40:49

PHP中文文件名输出乱码解决方法的相关文章

PHP中file_exists()判断中文文件名无效的解决方法_php技巧

本文实例讲述了PHP中file_exists()判断中文文件名无效的解决方法.分享给大家供大家参考.具体方法如下: php中判断文件是否存在我们会使用file_exists函数或is_file函数,但在使用file_exists时如果你文件名或路径是中文在uft8编码文档时是无效.本文就来解决此问题,下面我们一起来看看. 定义和用法:file_exists() 函数检查文件或目录是否存在. 如果指定的文件或目录存在则返回 true,否则返回 false. 例子1 复制代码 代码如下: <?php

asp.net url址址中中文汉字参数传递乱码解决方法

中文乱码是网站开发中会常碰到的问题,今天我们来讲一下关于url址址中中文汉字参数传递乱码解决方法,有需要的朋友可以参考下. 在cs文件里传参的时候用UrlEncode: Response.Redirect("B.asp教程x?Name="+Server.UrlEncode(Name)); 接参的时候用UrlDecode: Response.Write(Server.UrlDecode(Request.QueryString["Name"])); 脚本儿里传参的时候用

php做下载文件的实现代码及文件名中乱码解决方法

最近有人问我做下载文件的方法,对于php方法如下: 复制代码 代码如下: <?php header("Content-Type: application/force-download"); header("Content-Disposition: attachment; filename=ins.jpg"); readfile("imgs/test_Zoom.jpg"); ?> 第一行代码是强制下载: 第二行代码是给下载的内容指定一个

php做下载文件的实现代码及文件名中乱码解决方法_php技巧

最近有人问我做下载文件的方法,对于php方法如下: 复制代码 代码如下: <?php header("Content-Type: application/force-download"); header("Content-Disposition: attachment; filename=ins.jpg"); readfile("imgs/test_Zoom.jpg"); ?> 第一行代码是强制下载: 第二行代码是给下载的内容指定一个

Win8安装中文软件出现乱码解决方法

一些朋友在试用Windows 8开发者预览版的时候会遇到安装中文软件出现乱码的问题,很让人头疼.英文还能找办法看懂,乱码可就难猜了.怎样解决这个问题呢? Win8安装中文软件报错 其实解决问题的方法也很简单,到区域和语言设置面板中做一些设置就可以了. 进入Control Panel→All Control Panel Items→Region,将其中的"Location"和"Aministrative→Current Language for non-Unicode prog

C# .net中cookie值为中文时的乱码解决方法

一.cookie的名称或子cookie的名称不能为中文,否则无法获得cookie 这个好办,名称不用中文即可 二.cookie的值为中文时候,取cookie的值会出现乱码 解决办法:存取cookie时候先解码和编码 存cookie,进行编码: cookie.Value = HttpUtility.UrlEncode("上海"); 取cookie时候,进行解码:cookieValue = HttpUtility.UrlDecode(cookie.Value); 另外注意: 取子cooki

xmlhttp中文gbk,uft-8乱码解决方法

最近用了 dhtmlx的tree,中文的xml居然用不了,报错,整个系统是gb2312的,而dhtmlx只支持utf8,英文是正常的,中文就出错.   发现是,microsoft.xmlhttp的原因,就查到了上面的文件. <script language="vbscript"> '处理中文 function bin2str(bin) dim tmp,ustr,i tmp="" for i=1 to lenb(bin)-1 ustr=ascb(midb(

使用WebLogic的OTN插件时Eclipse控制台输出中文乱码解决方法

  使用WebLogic时控制台输出中文乱码解决方法1.找到weblogic安装目录,当前项目配置的domain2.找到startWebLogic.cmd文件3.打开文件,在"call "%DOMAIN_HOME%\bin\startWebLogic.cmd" %*"上面增加如下代码即可,主要是设置UTF-8啊. @ECHO OFF @REM WARNING: This file is created by the Configuration Wizard. @RE

远程linux xshell下输出中文乱码解决方法_unix linux

使用xshell登录中文版CentOS或者redhat时,在xshell下如果输出的是中文的话可能会显示乱码,通过如下办法可以有效的解决乱码问题 linux中文乱码解决方法如下: 复制代码 代码如下: [root@localhost ~]# cd /etc/sysconfig/ [root@localhost sysconfig]# cp i18n i18n.bak #备份i18n文件 [root@localhost sysconfig]# echo "" >i18n [root