PHP中文文件名输出乱码解决方法,php实现中文文

作者: 金沙澳门官网  发布:2019-10-02

原因是编码难题,所以要转码,客户PHP里面包车型的士 iconv 函数就能够缓慢解决:

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

 代码如下

 代码如下

<?php
$filename = "中文 文件名.txt";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
print "Hello!";
?>

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

把程序保存成UTF-8编码再拜谒,IE6下载的文书名就能够乱码。 FF3下下载的文本名就独有“中文”八个字。Opera 9下一切符合规律。

例子

输出的header实际上是那样子:

 代码如下

 代码如下

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

Content-Disposition: attachment; filename=中文文件名.txt其实遵照PAJEROFC2231的概念, 多语言编码的Content-Disposition

?>

相应那样定义:

另一种缓和汉语乱码难点在于

 代码如下

 代码如下

Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"

$sFileName = "sda.php";
$sOriginalFileName = $sFileName;
$sExtension = s str($sFileName, (strrpos($sFileName, '.') + 1));//找到增加名
$sExtension = strtolower($sExtension);
$sFileName = date("YmdHis").rand(100, 200).".".$sExtension; //那样正是咱们的新文件名了,全部字的不会有乱码了哦。

即:

大家仍是能够运用urlencode来扩充编写翻译

filename前边的等号在此之前要加 *
filename的值用单引号分成三段,分别是字符集(utf8)、语言(空)和urlencode过的公文名。
最棒增加双引号,不然文件名中空格前面包车型地铁一些在Firefox中体现不出去
当心urlencode的结果与php的urlencode函数结果不太一样,php的urlencode会把空格替换成+,而那边供给替换到%20

如  urlencode('中文');

例1

例子

 代码如下

 代码如下

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

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

    $filename = basename($file);

$filename = basename($file);

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

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 . '"');
    }

//管理中文文件名
$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);
?>

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格式的。

本文由金沙澳门官网送注册58发布于金沙澳门官网,转载请注明出处:PHP中文文件名输出乱码解决方法,php实现中文文

关键词:

上一篇:php delete 函数
下一篇:没有了