utf 8 — php, передающий кодированную строку utf-8, не работает на soapCall

Передача правильно закодированной строки utf-8 в php soapCall, и он возвращает, что это не допустимый символ utf_8.

$ source = «test» — @ — ‘- «½ ℗ ↄ⃝ одиночно»
echo mb_detect_encoding ($ source, «auto») — это UTF-8

hex = 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

0

Решение

При попытке использовать utf8 / utf8mb4, если вы видите Черные бриллианты с вопросительными знаками,
существует один из этих случаев:

Случай 1 (оригинальные байты были не utf8):

  • Сохраняемые байты не кодируются как 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>

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]