2016-06-29 9 views
0

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

$source = “test”[email protected]– '— " ½ ℗ ↄ⃝ it′s ‘single’
echo mb_detect_encoding($source, "auto") is 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

Error: processSalesOrder interupted because of SOAP-ERROR: Encoding: string '\x9c...' is not a valid utf-8 string

возвращается: TEST- @ "½ ITS SINGLE

добавил 'кодирования' => 'UTF-8' на обоих SoapClient иницилизации вариантов и к опциям soapCall. база данных

MariaDB, таблицы, столбца utf8mb4, сверка utf8mb4_unicode_ci

php.ini default_charset = "UTF-8"

соединение с базой данных устанавливается в utf8m b4 html page set to charset = utf8

Отображается правильно на веб-странице. обнаружение кодирования показывает UTF-8 прямо перед отправкой в ​​soapCall, но отклоняется с помощью soapCall.

Что мне не хватает?

EDIT: Я также использовал предложение от PHP DOMDocument::save() saves as ASCII instead of 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, если вы видите Black Алмазы с вопросительными знаками, один из этих случаев существует:

Случай 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>