3 Stimmen

Wie man \uXXXX zur korrekten Anzeige, unter Verwendung von PHP5

Ich habe eine Datenbank geerbt, die Zeichenfolgen wie folgt enthält:

\u5353\u8d8a\u4e9a\u9a6c\u900a : \u7f51\u4e0a\u8d2d\u7269 : \u5728\u7ebf\u9500\u552e\u56fe\u4e66\uff0cDVD\uff0cCD\uff0c\u6570\u7801\uff0c\u73a9\u5177\uff0c\u5bb6\u5c45\uff0c\u5316\u5986

Die Frage ist, wie bekomme ich das in einer HTML-Seite richtig angezeigt?

Ich verwende PHP5, um die Strings zu verarbeiten.

4voto

daremon Punkte 4866

1) Ich habe eine Unicode-Schriftart heruntergeladen und installiert CODE2000

2) Ich habe dies geschrieben:

<?php header('Content-Type: text/html;charset=utf-8'); ?>
<head></head>
<body style="font-family: CODE2000">
<?php
// I had to remove some strings like ': ', 'DVD', 'CD' to make it in \uXXXX format
$s = '\u5353\u8d8a\u4e9a\u9a6c\u900a\u7f51\u4e0a\u8d2d\u7269\u5728\u7ebf\u9500\u552e\u56fe\u4e66\uff0c\uff0c\uff0c\u6570\u7801\uff0c\u73a9\u5177\uff0c\u5bb6\u5c45\uff0c\u5316\u5986';
$chars = explode('\\u', $s);
foreach ($chars as $char) {
  $c = iconv('utf-16', 'utf-8', hex2str($char));
  print $c;
}

function hex2str($hex) {
  $r = '';
  for ($i = 0; $i < strlen($hex) - 1; $i += 2)
    $r .= chr(hexdec($hex[$i] . $hex[$i + 1]));
  return $r;
}
?>
</body>
</html>

3) Sie produzierte dies characters http://img267.imageshack.us/img267/9759/49139858.png was richtig sein könnte. Z.B. ist das 1. Zeichen (5353) tatsächlich こん und die 2. (8d8a) ist こん . Natürlich kann ich nicht 100%ig sicher sein, aber es scheint zu passen. Vielleicht können Sie es von hier aus übernehmen.

Das war eine gute Übung :)

3voto

oggy Punkte 3303

PHP < 6 kennt sich mit Unicode leider nicht aus, so dass Sie alles selbst machen müssen:

  • Stellen Sie sicher, dass Ihre Datenbank eine Unicode-fähige Kodierung für ihre Verbindungen verwendet. In MySQL zum Beispiel lautet die Direktive default-character-set = . UTF-8 ist eine vernünftige Wahl
  • Teilen Sie dem Browser mit, welche Kodierung Sie verwenden. Es gibt mehrere Möglichkeiten, dies zu tun:

    1. Setzen Sie einen Zeichensatzwert in der Kopfzeile Content-Type. Etwas wie header('Content-Type: text/html;charset=utf-8');

    2. Verwenden Sie eine <meta http-equiv>-Version des obigen Headers.

    3. Setzen Sie den Parameter für die XML-Kodierung <?xml encoding="utf-8"?>

Die Option 1. hat Vorrang vor der Option 2. Ich bin mir nicht sicher, wo 3. hineinpasst.

Wenn Sie vor der Anzeige der Daten eine String-Verarbeitung durchführen müssen, verwenden Sie die Multibyte-Stringfunktionen (mb_*). Wenn Sie Unicode-Daten aus anderen Quellen in anderen Kodierungen haben, müssen Sie mb_convert_encoding verwenden.

2voto

Auf der Grundlage von Daremons Beitrag ist hier eine "unicode_decode"-Funktion, die Folgendes konvertiert \uXXXX in ihre UTF-Entsprechungen.

function unicode_decode($str){
    return preg_replace("/\\\u([0-9A-F]{4})/ie", "iconv('utf-16', 'utf-8', hex2str(\"$1\"))", $str);    
}
function hex2str($hex) {
    $r = '';
    for ($i = 0; $i < strlen($hex) - 1; $i += 2)
    $r .= chr(hexdec($hex[$i] . $hex[$i + 1]));
    return $r;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X