У меня есть файл Python, который я вызываю с помощью функции exec
PHP. Затем Python выводит строку (по-видимому, Unicode, основанную на использовании isinstance
), которая повторяется PHP. Проблема, с которой я сталкиваюсь, заключается в том, что если моя строка содержит в себе какие-либо специальные символы (например, символ степени), она не будет выводиться. Я уверен, что мне нужно что-то сделать, чтобы возиться с кодировкой, но я не совсем уверен, что делать и почему.
EDIT: чтобы получить представление о том, как я exec
, см. Следующий фрагмент кода:
$tables = shell_exec('/s/python-2.6.2/bin/python2.6 getWikitables.py '.$title);
Python правильно выводит строку, когда я вызываю getWikitables.py
сам по себе.
EDIT: Это определенно похоже на что-то либо на конец Python, либо на передачу результатов. Когда я запускаю strlen
для возвращаемых значений в PHP, я получаю 0. Может ли exec
принимать только определенный тип кодирования?
На php вы можете использовать такие методы, как utf8_encode()
или utf8_decode()
чтобы решить вашу проблему.
Попробуйте установить переменную среды 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);