php 执行的系统命令带中文时乱码

首先查看系统对中文的支持
locale -a | grep zh_CN

zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8

vi ~/.bash_profile
文件末尾添加:
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"


在php文件调用exec前设定环境变量
$locale='en_US.UTF-8'; // 或 $locale='zh_CN.UTF-8';
setlocale(LC_ALL,$locale);
putenv('LC_ALL='.$locale);


$txt = "/home/admin/wwwroot/zhuanma/public/txttest.txt";
$cmd = "iconv -f gb2312 -t utf-8 ".$txt." -c -s -o test.odt";

var_dump($cmd);
exec($cmd);

$txt2 = "/home/admin/wwwroot/zhuanma/public/test.odt";
$tmp = "/home/admin/wwwroot/zhuanma/public";
$set_charset = 'export LANG=en_US.UTF-8;';
$cmd2 = $set_charset." soffice --headless --convert-to pdf ".$txt2." --outdir ".$tmp;
var_dump($cmd2);

exec($cmd2. " >> /home/admin/wwwroot/zhuanma/public/test.log 2>&1");


查看文件编码
file -i test.txt

查看环境变量
export -p

猜你喜欢

转载自www.cnblogs.com/zhaojq1/p/11131161.html