PHP中使用shell_exec()传参时出现乱码的问题

在PHP中使用shell_exec()调用python脚本,最初在没有传参时运行的十分正常

shell_exec("python end.py")

然而在给脚本传递中文参数时就出现了乱码问题

shell_exec("python end.py $keywords")

其中$keywords为中文字符串。
PHP和Python中都使用UTF-8编码,但是传参仍然无法成功。
最后查阅资料发现Windows下shell中中文的默认编码为GBK,通过

 $encode = mb_detect_encoding($keywords, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));
 $gbk_keywords = mb_convert_encoding($keywords, 'GBK', $encode);

将$keywords转为GBK编码,成功传参。
PS:Windows中的shell默认编码是可以更改的,也可以通过这种方法解决问题。
Linux下中文的默认编码为UTF-8,所以Linux与Windows的文件转换时应注意编码问题。
不同的Linux系统下默认编码也是不一样的,如果出现乱码问题请使用locale查看默认编码,根据默认编码选择转码方案。

发表评论

电子邮件地址不会被公开。 必填项已用*标注