wake-up-neo.com

PHP json encode - Falsch formatierte UTF-8-Zeichen, möglicherweise falsch codiert

Ich verwende json_encode ($ data) für ein Datenarray und ein Feld enthält russische Zeichen. Ich habe dieses mb_detect_encoding () verwendet, um die Codierung für dieses Feld anzuzeigen und UTF-8 anzuzeigen. Ich denke, die Json-Kodierung ist aufgrund einiger schlechter Zeichen wie "ра▒" fehlgeschlagen. Ich habe eine Menge Dinge utf8_encode für die Daten ausprobiert und der Fehler wird durchgangen, aber die Daten sehen dann nicht mehr korrekt aus.

Was kann man mit diesem Problem tun?

14
sparkmix

Das Problem tritt auf, wenn sich einige Nicht-Utf8-Zeichen darin befinden, obwohl die meisten von ihnen Utf8-Zeichen sind. Dadurch werden alle nicht-utf8-Zeichen entfernt und jetzt funktioniert es.

$data['name'] = mb_convert_encoding($data['name'], 'UTF-8', 'UTF-8');
31
sparkmix

Wenn Sie ein mehrdimensionales Array zum Kodieren im JSON-Format haben, können Sie die folgenden Funktionen verwenden:

Wenn JSON_ERROR_UTF8 aufgetreten ist:

$encoded = json_encode( utf8ize( $responseForJS ) );

Below-Funktion wird verwendet, um Array-Daten rekursiv zu codieren

/* Use it for json_encode some corrupt UTF-8 chars
 * useful for = malformed utf-8 characters possibly incorrectly encoded by json_encode
 */
function utf8ize( $mixed ) {
    if (is_array($mixed)) {
        foreach ($mixed as $key => $value) {
            $mixed[$key] = utf8ize($value);
        }
    } elseif (is_string($mixed)) {
        return mb_convert_encoding($mixed, "UTF-8", "UTF-8");
    }
    return $mixed;
}
10
Irshad Khan

Stellen Sie sicher, dass Sie Ihr Pdo-Objekt mit dem Zeichensatz "iso" als "utf8 ..__" initiieren. Dieses Problem sollte behoben werden, indem Sie einen erneuten Utf8-Tanz vermeiden.

$pdo = new PDO("mysql:Host=localhost;dbname=mybase;charset=utf8", 'user', 'password');
4
Tom Ah

sie fügen einfach Ihre PDO-Verbindung charset = utf8

$pdo = new PDO("mysql:Host=localhost;dbname=mybase;charset=utf8", 'user', 'password');

hoffe das wird dir helfen

2
M.Bilal Murtaza

Entfernen Sie HTML-Entitäten vor der Json-Codierung. IS Verwendet html_entity_decode () in PHP und das Problem wurde gelöst.

$json = html_entity_decode($source);
$data = json_decode($json,true);
0
jayashan perera