#php #soap #utf-8 #character-encoding #cmd
#php #soap #utf-8 #кодировка символов #cmd
Вопрос:
Скрипт отправляет некоторые данные с помощью PHP SOAP-клиента, когда я запускаю его из браузера, все идет нормально. Но когда я пытаюсь выполнить его из CMD, я получаю ошибку:
SOAP-ОШИБКА: Кодировка: строка ‘CBP xe0 …’ не является допустимой строкой utf-8
Мой bat-файл выглядит следующим образом:
@echo OFF
(
chcp 65001
"E:xampxamppphpphp.exe" E:xampxampphtdocswebapiindex.php
)
С chcp или без него я все еще получаю ошибку.
Я выполнил тестовую проверку кодировки, и все время выводится ASCII, даже в браузере.. PHP-файл имеет кодировку utf-8, а bat-файл находится в ANSI.
$a = 'test text';
echo mb_detect_encoding($a);
$b = mb_convert_encoding($a, "UTF-8", "auto");
echo mb_detect_encoding($b);
$c = iconv("ASCII", "UTF-8", $a);
echo mb_detect_encoding($c);
$d = utf8_encode($a);
echo mb_detect_encoding($d);
Буду признателен за любую помощь.
Комментарии:
1. Может быть, файл UTF-8 имеет спецификацию ? Попробуйте сохранить его без спецификации.
2. Попробуйте вызвать его из командной строки Linux
Ответ №1:
Это может быть серьезной проблемой, связанной с Windows. Попробуйте это в командной строке Linux.
Вы также можете попробовать запустить его через PHP-CGI, а не только через CLI. Лично я использовал PHP в некоторых экзотических ситуациях, когда я передавал данные, и хотя данные казались идентичными, он не работал, пока я не использовал версию CGI (вы все еще можете вызвать его из командной строки).
Также может быть так, что среда, в которой вы работаете на веб-странице, и среда, в которой вы работаете из командной строки, существенно отличаются друг от друга, насколько это зависит от ваших потребностей. Например, когда PHP запускается из командной строки, у вас есть доступ к системным переменным окружения (в $_SERVER). Однако, когда они находятся внутри веб-страницы, их там нет. Вы можете увидеть, есть ли разница в том, что отправляет cURL, получив окончательную копию запроса (и / или заголовков) в обеих средах и сравнив их на уровне байтов. Вероятно, это ваш лучший выбор.
Вы также могли бы попытаться включить фактический (или аналогичный) код SOAP, чтобы мы знали, о какой ерунде вы говорили, из первых рук, вместо того, чтобы слепо метать дротики в возможные ответы.
(Если вам понравился этот ответ, примите его и проголосуйте за меня.)
Дастин