У меня есть программа Windows, способная обрабатывать UTF16 на входе. В скрипте PHP у меня есть кодировка, объявленная как UTF8. Как вызвать shell_exec или подобные функции для запуска программы и без изменения параметра? Или это вообще невозможно?Передача строки Unicode в PHP shell_exec на Windows
ответ
PHP реализует shell_exec
с использованием библиотечной функции C popen
. Это байт-ориентированная функция.
Среда выполнения Windows C интерпретирует данные байт для функций stdlib как представляющих текст, закодированных на текущей кодовой странице, по умолчанию языковая кодовая страница, которая никогда не будет UTF, поэтому, к сожалению, вы не можете надежно получить Unicode, дорожка.
Вы можете попробовать запустить приложение с кодовой страницей, измененной на 65001, на кодовой странице Windows, которая должна быть UTF-8. Однако существует ряд ошибок stdlib, которые делают работу на кодовой странице 65001 ненадежной, поэтому вероятность того, что она не сработает. И если вы работаете на веб-сервере, возиться с глобальными настройками локали процесса - это рискованная перспектива.
Это проблема со всеми инструментами, использующими функции C stdlib, которые являются почти всеми скриптовыми языками. Только надежный способ взаимодействия с Unicode в args или envvars, когда вы обнаруживаете, что вы работаете под Windows, заключается в том, чтобы вместо этого использовать собственные функции API Win32. На PHP это похоже на то, что вы можете сделать это, используя w32api_invoke_function
, чтобы позвонить CreateProcessW
. (Не делал этого сам, но та же стратегия работает с Python, используя ctypes
.)
В качестве альтернативы можно передавать данные через потоки stdin/stdout. Затем вы можете прочитать их как байты и выполнить любые преобразования Юникода самостоятельно.
- 1. Передача переменных в shell_exec()?
- 2. Передача переменных GET в shell_exec в PHP
- 3. PHP: shell_exec Права доступа на Windows Server
- 4. PHP shell_exec не работает в Windows Azure
- 5. Передача результата jscolor команде shell_exec
- 6. WAMP - PHP shell_exec() проблема
- 7. Как вывести строки Unicode на консоли Windows
- 8. Python: передача строки Unicode в C++-модуль
- 9. PHP shell_exec Net Use Output
- 10. WkHtmlToPdf Передача переменных через shell_exec()
- 11. PHP shell_exec directory
- 12. curl командной строки работает, php shell_exec() не
- 13. PHP shell_exec() в ubuntu
- 14. Подчеркивание в php shell_exec
- 15. Передача аргументов командной строки Unicode консольному приложению
- 16. php shell_exec echo
- 17. Проблема Shell_exec с php
- 18. PHP shell_exec() - Подробный вывод?
- 19. php cygwin? как shell_exec
- 20. Права на PHP shell_exec в nginx
- 21. Передача текстовой переменной с использованием shell_exec
- 22. Windows pgpass.conf файл не работает с PHP shell_exec()
- 23. PHP shell_exec Суды на CENTOS 7
- 24. PHP shell_exec bash.exe не работает в ОС Windows XP IIS
- 25. php shell_exec return null
- 26. PHP shell_exec command
- 27. shell_exec throwing warning php
- 28. Triggering shell_exec метод в php
- 29. Shell_exec php с nohup
- 30. PHP shell_exec() интерполяция