php中目录显示乱码,windows下,PHP创建目录名、文件名中文乱码问题

问题

在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() ] )

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

/**

* 转换字符编码

* @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

$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

?>

解决示例

#示例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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值