Arbeiten mit GD ( imagettftext() ) und UTF-8-Zeichen
Gerade für die Aufzeichnung - meine erste Frage hier, aber hoffentlich nicht meine Letzte Eingabe in der Gemeinschaft.
Aber das ist nicht der Grund, warum ich hier bin.
Ich bin derzeit an der Entwicklung eines einfachen Systems, das erzeugt ein Bild mit text auf es. Alles ging gut, bis ich merkte, dass GD nicht in den Griff UTF-8-Zeichen wie
ā, č, ž, ä, ø, é
und so weiter.
, Um die Sache aufzuklären - ich bin mit imagettftext()
Versucht mein problem zu lösen grub ich in den tiefen von google und einige Lösungen wurden zurückgegeben, keiner von Ihnen, leider löste mein problem vollständig.
Derzeit bin ich mit diesem script, das ich in diesem thread gefunden - PHP-Funktion imagettftext() und unicode
private function properText($text){
//Convert UTF-8 string to HTML entities
$text = mb_convert_encoding($text, 'HTML-ENTITIES',"UTF-8");
//Convert HTML entities into ISO-8859-1
$text = html_entity_decode($text,ENT_NOQUOTES, "ISO-8859-1");
//Convert characters > 127 into their hexidecimal equivalents
$out = "";
for($i = 0; $i < strlen($text); $i++) {
$letter = $text[$i];
$num = ord($letter);
if($num>127) {
$out .= "&#$num;";
} else {
$out .= $letter;
}
}
return $out;
}
und es funktioniert gut für einige Zeichen, aber nicht alle von Ihnen, zum Beispiel, eine mit umlaut nicht korrekt Umgerechnet.
So, in diesem Punkt bin ich nicht sicher, wo und was zu suchen, mehr als ich kann nicht Vorhersagen, die Benutzereingaben. Um genauer zu sein, das system zieht sich die artist-Namen aus einer xml-feed und die Verwendung der Daten für die image generation (ich bin nicht der Planung zu unterstützen, Hieroglyphen).
Ich habe dafür gesorgt, dass die erfassten Daten aus dem feed ist in der Tat UTF-8 mit PHP mb_detect_encoding() und ich habe dafür gesorgt, dass alle Zeichen, die derzeit nicht korrekt angezeigt werden indded in der schriftart-Datei, die ich füttere, um die imagettftext()
Funktion, indem Sie es mit windows charmap tool.
Hoffentlich finde ich meine Antwort hier und vielen Dank für Eure Hilfe im Voraus!
Bearbeiten
Zu klären, - die Zeichen werden nicht korrekt angezeigt, oder, um genauer zu sein, sind ersetzt durch fehlerhafte Zeichen. Hier ist ein screenshot -
sollte es Lesen "José González"
Bearbeiten No2
Mit bin2hex () - Funktion auf die Daten aus dem xml-feed wird diese.
José González -> 4a6f73c3a920476f6e7ac3a16c657a
//input -> bin2hex(input)
Bearbeiten - Feste
Wie setzte ich meine Recherchen kam ich auf eine Lösung für mein problem, dieses Stück code hat es geschafft!
$text = mb_convert_encoding($text, "HTML-ENTITIES", "UTF-8");
$text = preg_replace('~^(&([a-zA-Z0-9]);)~',htmlentities('${1}'),$text);
return($text);
Nun alle Charaktere, die mich beunruhigt korrekt angezeigt werden!
- Was funktioniert nicht genau? Wie ist die Ausgabe nicht das, was Sie erwarten? Verwenden Sie eine schriftart, die tatsächlich enthält die Zeichen, die Sie wollen? Ich bin mit
imagegettftext
mit japanischen, also Unicode-Zeichen sind kein problem im Allgemeinen. - Ja, wie gesagt in der original-post, den ich gemacht habe sicher, dass alle Zeichen, die derzeit nicht korrekt angezeigt werden indded in der font-Datei. Sache, die funktioniert ist die Ausgabe - Zeichen nicht korrekt angezeigt, oder, um genauer zu sein, sind ersetzt durch fehlerhafte Zeichen. Hier ist ein screenshot - imgur.com/B8RHa - sollte es Lesen "José González"
- Die Fehler, die Sie dort bekommen : i.imgur.com/B8RHa.jpg ist definitiv ein encoding-problem, wie das drucken einige UTF-8-Woerter, die in ANSI.
- Ist Ihr text wirklich korrekt in UTF-8 kodiert? Bitte zeigen Sie ein
bin2hex()
des Strings. - Ich habe
bin2hex()
Ergebnis der string zu dem original-Beitrag. - Sie sollte hinzufügen, dass als Antwort und akzeptieren es. Kann nützlich sein, um anderen in der Zukunft. Immer noch seltsam, da die Funktion soll akzeptieren UTF-8 direkt.
- Nur hat das! Vielen Dank für alle Hilfe! 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie setzte ich meine Recherchen kam ich auf eine Lösung für mein problem, dieses Stück code hat es geschafft!
Nun alle Charaktere (und alle die neuen die ich gesehen habe), die mich beunruhigt korrekt angezeigt werden!
preg_replace
Rückruf scheint ziemlich unsinnig wenn. Sicher, dass dies funktioniert?In Erster Linie stellen Sie sicher, dass Ihre IDE ist nicht speichern die Datei in einem anderen encoding als UTF8. Zum Beispiel neue Intellij IDEA 9 geändert UTF-8 zu WINDOWS-1250 Windows-Plattform. Wenn Sie nicht bemerken, dass und verwenden Sie Konstanten strings zum testen, es ist ziemlich verrückt, zu Debuggen.