Передача правильно закодированной строки utf-8 в php soapCall, и он возвращает, что это не допустимый символ utf_8.
$ source = «test» — @ — ‘- «½ ℗ ↄ⃝ одиночно»
echo mb_detect_encoding ($ source, «auto») — это UTF-8hex = E2 80 9C 74 65 73
74 E2 80 9D 2D 40 E2 80 93 20 27 E2 80 94 20 22 20 C2 BD 20 20 E2 84
97 20 20 E2 86 84 E2 83 9D 20 20 69 74 E2 80 B2 73 20 E2 80 98 73 69
6E 67 6C 65 E2 80 99Ошибка: processSalesOrder прерван из-за ошибки SOAP: Кодировка:
строка ‘\ x9c …’ не является допустимой строкой utf-8
возвращает: TEST — @ ‘ «½ IT S SINGLE
добавлено ‘encoding’ => ‘UTF-8’ как для параметров инициализации soapClient, так и для параметров soapCall.
База данных mariadb, таблица, столбец — utf8mb4, сопоставление utf8mb4_unicode_ci
php.ini default_charset = «UTF-8»
соединение с базой данных установлено в utf8mb4
HTML-страница установлена в charset = utf8
Правильно отображается на веб-странице.
Обнаружение кодировки показывает UTF-8 непосредственно перед отправкой в soapCall, но отклоняется soapCall.
Что мне не хватает?
РЕДАКТИРОВАТЬ:
Я также использовал предложение от PHP DOMDocument :: save () сохраняет как ASCII вместо UTF-8 но это не помогло
$ xmlDomDoc-> encoding = ‘UTF-8’;
Я наконец решил проблему, изменив настройки в php.ini для [iconv] и [mbstring] на UTF-8
iconv.input_encoding = UTF-8
iconv.internal_encoding = UTF-8
iconv.output_encoding = UTF-8
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
При попытке использовать utf8 / utf8mb4, если вы видите Черные бриллианты с вопросительными знаками,
существует один из этих случаев:
Случай 1 (оригинальные байты были не utf8):
SET NAMES
) для INSERT
а также SELECT
не были utf8 / utf8mb4. Почини это.CHARACTER SET utf8
(или utf8mb4).Случай 2 (оригинальные байты мы utf8):
SET NAMES
) для SELECT
не было utf8 / utf8mb4. Почини это.CHARACTER SET utf8
(или utf8mb4).Черные бриллианты появляются только когда браузер настроен на <meta charset=UTF-8>
Других решений пока нет …