2016-06-29 11 views
0

übergibt eine korrekt codierte utf-8-Zeichenfolge zu einem php soapCall und es gibt zurück, dass es kein gültiges utf_8 Zeichen ist.PHP übergibt eine utf-8-codierte Zeichenfolge schlägt auf 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

kehrt: TEST- @ ' "½ ITS SINGLE

hinzugefügt 'der Codierung'=> 'UTF-8' sowohl die init Optionen Soapclient und zu den Optionen soapcall.

MariaDB Datenbank, Tabelle, Spalte sind utf8mb4, Sortierung utf8mb4_unicode_ci

php.ini default_charset = "UTF-8"

Datenbankverbindung utf8m gesetzt b4 html-Seite auf charset = utf8 gesetzt

Anzeige auf der Webseite korrekt. Encoding Detect zeigt UTF-8 direkt vor dem Senden an soapCall, wird aber von soapCall abgelehnt.

Was fehlt mir?

EDIT: Ich auch Vorschlag von PHP DOMDocument::save() saves as ASCII instead of UTF-8 verwendet, aber es hat nicht geholfen.

$xmlDomDoc->encoding = 'UTF-8';

ich beschlossen schließlich die Frage Einstellungen in der php.ini zu ändern für [iconv] und [mbstring] auf 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

Antwort

0

Beim Versuch, UTF-8/utf8mb4 zu verwenden, wenn Sie Schwarz sehen Diamanten mit Fragezeichen, einem dieser Fälle besteht:

Fall 1 (Original-Bytes waren nicht utf8):

  • Die zu speichernden Bytes sind nicht als utf8 codiert. Repariere das.
  • Die Verbindung (oder SET NAMES) für die INSERTund die SELECT waren nicht utf8/utf8mb4. Repariere das.
  • Überprüfen Sie auch, ob die Spalte in der Datenbank CHARACTER SET utf8 (oder utf8mb4) ist.

Fall 2 (original Bytes waren utf8):

  • Die Verbindung (oder SET NAMES) für die SELECT war nicht utf8/utf8mb4. Repariere das.
  • Überprüfen Sie auch, ob die Spalte in der Datenbank CHARACTER SET utf8 (oder utf8mb4) ist.

Schwarze Diamanten treten nur, wenn der Browser auf <meta charset=UTF-8> gesetzt