Ich benutze fast die neueste Version von PHP (5.5.11) und hier ist das Problem. Wenn ich json_encode
des Teils der Zeichenfolge verwende, gibt es false zurück. Am Anfang habe ich substr
benutzt, aber dann habe ich gemerkt, dass dies völlig falsch ist, wenn man mit nicht-englischen Strings arbeitet. Aber auch nachdem ich mb_substr
verwendet immer noch sehe ich, dass json_encode
kehrt false
:json_encode gibt false zurück, wenn es um Multibyte-Teilstring geht
$s = "に搭載されるようになると、その手軽さからJは急速に普及していく。、通信に関する標準を策定する国際団体インターナショナル";
$a = mb_substr($s, 0, 10);
Wie Sie sehen,
var_dump(json_encode([
'd' => $a
]));
kehrt false
und
var_dump(json_encode([
'd' => $s
]));
kehrt richtig json.
Wenn ich in json_last_error schaue, sehe ich, dass dies wegen Malformed UTF-8 characters, possibly incorrectly encoded
ist. Das Problem ist also, dass mb_substr mir fehlerhafte Zeichen gibt.
Wenn ich var_dump($a);
sehe, sehe ich, dass es produziert string(10) "に搭載�"
(ich nehme an, dass jedes japanische char 3 Bytes ist, und das Fragezeichen ist falsches Zeichen).
Also wie kann ich eine Teilzeichenfolge von der Zeichenfolge auf eine Weise erhalten, dass ich keine fehlerhafte Zeichenfolge erhalten werde?
Wenn das Problem dadurch gelöst, es bedeutet nicht, Ihr 'mb_internal_encoding' gesetzt ist nicht auf 'utf-8'? Wäre es nicht sinnvoll, die interne Kodierung als bessere Lösung einzustellen? –