2016-05-23 7 views
0

Ich benutze PHP für dieses Web-Entwicklungsprojekt. Im Moment arbeite ich an einer Benutzerseite, auf der der Benutzer Wörter hinzufügen kann, die er kennt. Natürlich beginne ich grob, ohne irgendwelche Besonderheiten hinzuzufügen, wie zum Beispiel Kennen Sie diesen Zeichenvorschlag, etc.Wie konvertiert man ein chinesisches Zeichen in UTF-16-Code-Einheiten?

Ich habe die Herausforderungen des Hinzufügens von UTF-16 Kollation und Zeichensatz auf UTF-16 in meinem angegangen MySQL-Datenbank, tatsächlich online unter http://freemysqlhosting.net, um chinesische Schriftzeichen auf meiner Website zu unterstützen. Nun, mit was ich kämpfe, ist die automatische PinYin-Generierung für meine chinesischen Charaktere zu unterstützen.

Ich habe dies nach der Suche in ganz SO gefunden: https://github.com/reorx/pinyindep/blob/master/Uni2Pinyin. Jede Zeile beginnt mit einem chinesischen Zeichen in UTF-16 Code Units.

Nehmen Sie zum Beispiel 爱. In UTF-16 ist es . Ich konvertiere das bei https://r12a.github.io/apps/conversion/. Wenn ich in der Datei nachschaue, bekomme ich die Pinyin zugeordnet. : D Dies ist die Funktionalität, die ich brauche, obwohl es in GitHub in JS statt in PHP nachgeschlagen wird.

In der manuellen Suche wird ai4 zurückgegeben, was die korrekte Intonation ist. Nun, was ich suche, ist entweder eine integrierte PHP-Bibliothek oder ein Code-Snippet, um diese Zeichenketteneingabe zu konvertieren, sagen wir "爱" in eine UTF-16 Four Character Code Unit, wie hier .

Was ist also die Frage:

Wie soll ich ein chinesisches Schriftzeichen, in Form einer Zeichenfolge in UTF-16 Code-Einheiten konvertieren? (Entweder durch die eingebaute Bibliothek oder durch einen vorgeschlagenen PHP Code Snippet)

P.S. Ich mag Tools von Drittanbietern nicht wirklich, es sei denn, sie sind weltweit sehr beliebt oder es gibt keine andere Möglichkeit.

Antwort

2

Sie benötigen PHP multibyte string Modul zu verwenden:

$c = "爱"; 
list(, $d) = unpack('N', mb_convert_encoding($c, 'UCS-4BE', 'UTF-8')); 
echo dechex($d); 
// => 7231 

ändern UTF-8-UTF-16 wenn die Zeichenfolge in dieser Codierung aus der Datenbank kommen.

mb_convert_encoding wird die Zeichenfolge in 4-Byte-pro-Zeichen-Codierung ändern; dann wandelt unpack die vier Bytes in ein vorzeichenloses long um; Umwandlung in hexadezimale Zeichenfolge unter Verwendung von dechex.

+0

Oh, so cool! Danke, mein Herr! Einen schönen Tag noch! – Muymuy1

+0

Aber warum kann ich es nicht sofort von mb_convert_encoding bekommen? – Muymuy1

+0

Weil '" 7231 "' keine Kodierung ist. – Amadan

Verwandte Themen