Linux下PHP使用exec执行unzip解压中文乱码问题

发布于:2022-08-24 10:29:31

这个周末碰到一个问题,如题目,因为懒得去给PHP开zip扩展,就打算直接通过php的exec命令对某个包含中文文件名的zip包进行解压。然而却发现解压出来的结果,文件名带中文的都乱码了。于是百度了一下shell命令unzip解压中文乱码的解决方法,网上给出两种方式,一种是命令带上-O参数 -O CP936,另一种是修改系统环境/etc/environment中加入2行

UNZIP="-O CP936"

ZIPINFO="-O CP936"

然并卵,两种方式都不起作用,依旧乱码。于是便老老实实过周末去了~哈哈哈

今天再次查起这个问题,看到网上有人说是locale charmap的问题,在命令行中,php输出locale charmap结果为UTF-8

php -r "echo exec('locale charmap');"

UTF-8

而在程序代码中输出则是 ANSI_X3.4-1968

里的问题了,解决方法是在php代码中加入locale的设置代码

$locale = 'zh_CN.UTF-8';

setlocale(LC_ALL, $locale);

putenv('LC_ALL='.$locale);

至此完美解决中文乱码问题~~

转载:查看原文
阅读 429