PHP exec 编码问题

6
当我在控制台执行命令“sendsms XXXXXXXXX 'śćźłóśadad'”时,一切正常。但当我在php中执行exec(“sendsms XXXXXXXXX 'śćźłóśadad'”)时,消息体没有波兰字母。Debian控制台采用UTF-8编码,php文件也采用UTF-8编码。当我从cli执行此php文件时,一切正常,但是当我从浏览器运行它时(同一个文件),问题出现了。为什么?如何解决?

1
"没有波兰字母"是什么意思?它们会变成乱码,还是完全被忽略了? - Mr Lister
cosśźć => cos(截取字符串) - mitch
但问题是当我从浏览器运行它时 - "cosśźć" 是用户输入吗?如果是,那么你的 HTML 页面可能缺少 UTF-8 元标记,而你的脚本接收到的字符串并不是你想要的。 - AD7six
不,输入是UTF格式,但我尝试在没有输入的情况下运行它,只执行了“sendsms 888888888 cosśźćłó”。 - mitch
1个回答

9
当您通过CLI界面运行脚本时,子进程会继承父进程中的环境变量,其中包含变量LANG,用于传递字节的编码方式给底层C运行时。当您通过mod_php执行程序时,很可能未设置LANG变量。因此,您可以通过自己进行配置来成功执行程序。
<?php
putenv('LANG=en_US.UTF-8');
exec("sendsms 888888888 cosśźćłó"); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接