Unicode向PHP的exec

问题描述 投票:6回答:3

我有我与PHP的exec函数调用Python文件。然后Python输出一个字符串(显然的Unicode,基于使用isinstance),这是由PHP呼应。我遇到的问题是,如果我的字符串任何特殊字符在它(如度数符号),也不会输出。我敢肯定,我需要做的事情与编码摆弄,但我真的不知道做什么,以及为什么。

编辑:要获得我如何打电话exec的想法,请参见下面的代码片段:

$tables = shell_exec('/s/python-2.6.2/bin/python2.6 getWikitables.py '.$title);

Python的正常输出,当我打电话getWikitables.py本身的字符串。

编辑:这肯定似乎是Python的结束无论是东西,还是在传递的结果。当我在PHP中的返回值运行strlen,我得到0只能exec接受一定的编码类型?

php python unicode exec
3个回答
-1
投票

在PHP中可以使用像utf8_encode()utf8_decode()的方法来解决你的问题。


11
投票

尝试立即执行每LANG的Python脚本之前设置http://php.net/shell-exec#85095环境变量:

shell_exec(sprintf(
  'LANG=en_US.utf-8; /s/python-2.6.2/bin/python2.6 getWikitables.py %s',
    escapeshellarg($title)
));

(使用sprintf()的(希望)更容易一点点跟着长度的字符串)

您可能还/,而不是需要调用shell_exec(),每http://php.net/shell-exec#78279之前做到这一点:

$locale = 'en_US.utf-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);

1
投票

我有过类似的问题,并用以下解决它。我不明白为什么它是必要的,因为我虽然都已经使用UTF-8进行处理。调用命令行上我的Python脚本工作,但不是通过PHP和Apache的exec(了shell_exec)。

据当你想使用php forum entry需要这一个escapeshellarg()

setlocale(LC_CTYPE, "en_US.UTF-8");

它需要在执行之前escapeshellarg()被调用。此外,有必要设置exec命令之前一定Python environment variable(实测值不相关的暗示here):

putenv("PYTHONIOENCODING=utf-8");

我的Python脚本评估这样的论点:

sys.argv[1].decode("utf-8")

(提示:这是必需的,因为我用的是library一些阿拉伯语文本转换。)

所以最后,我可以想像,原来的问题就可以解决这样说:

setlocale(LC_CTYPE, "en_US.UTF-8");
putenv("PYTHONIOENCODING=utf-8");
$tables = shell_exec('/s/python-2.6.2/bin/python2.6 getWikitables.py ' .
          escapeshellarg($title));

但我不能告诉关于返回任何有价值的东西。在我来说,我何尝输出到浏览器直接没有任何问题。

花了很多很多时间找到了......一个的情况下,当我讨厌我的工作;-)

© www.soinside.com 2019 - 2024. All rights reserved.