关于windows下,PHP创建目录、文档名时中文乱码问题

来源:互联网 发布:淘宝退货流程图 编辑:程序博客网 时间:2024/06/11 12:19

问题

在windows下,PHP调用mkdir()、file_put_contents()、fopen()函数创建带有中文的目录或文档名时,出现乱码。

原因

经过查阅资料,这跟系统字符集有关系。

windows(简体中文),默认字符集是:gbk
windows(繁体中文),默认字符集是:big5
linux,默认字符集是:utf-8

解决

使用iconv或mb_convert_encoding函数转换字符的编码。

//将字符串 str 从 in_charset 转换编码到 out_charset。string iconv ( string $in_charset , string $out_charset , string $str )//将 string 类型 str 的字符编码从可选的 from_encoding 转换到 to_encoding。string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ] )

根据系统设定转换编码,方法如下:

<?php/** * 转换字符编码 * @param $string * @return string */function convertEncoding($string){    //根据系统进行配置    $encode = stristr(PHP_OS, 'WIN') ? 'GBK' : 'UTF-8';    $string = iconv('UTF-8', $encode, $string);    //$string = mb_convert_encoding($string, $encode, 'UTF-8');    return $string;}

乱码示例

<?php#示例1$dir = __DIR__ . '/中英文目录Test1';mkdir($dir); //目录名:涓嫳鏂囩洰褰昑est1#示例2$fileName = __DIR__ . '/中英文档名Test2.txt';file_put_contents($fileName, '文件内容Test2');//文件名:涓嫳鏂囨。鍚峊est2.txt//文件内容:文件内容Test2#示例3$fileName = __DIR__ . '/中英文档名Test3.txt';$fp = fopen($fileName, 'w');fwrite($fp, '文件内容Test3');fclose($fp);//文件名:涓嫳鏂囨。鍚峊est3.txt//文件内容:文件内容Test3?>

解决示例

<?php#示例1$dir = __DIR__ . '/中英文目录Test1';$dir = convertEncoding($dir);mkdir($dir); //目录名:中英文目录Test1#示例2$fileName = __DIR__ . '/中英文档名Test2.txt';$fileName = convertEncoding($fileName);file_put_contents($fileName, '文件内容Test2');//文件名:中英文档名Test2.txt//文件内容:文件内容Test2#示例3$fileName = __DIR__ . '/中英文档名Test3.txt';$fileName = convertEncoding($fileName);$fp = fopen($fileName, 'w');fwrite($fp, '文件内容Test3');fclose($fp);//文件名:中英文档名Test3.txt//文件内容:文件内容Test3/** * 转换字符编码 * @param $string * @return string */function convertEncoding($string){    //根据系统进行配置    $encode = stristr(PHP_OS, 'WIN') ? 'GBK' : 'UTF-8';    $string = iconv('UTF-8', $encode, $string);    //$string = mb_convert_encoding($string, $encode, 'UTF-8');    return $string;}
阅读全文
1 0
原创粉丝点击