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 -

Arbeiten mit GD ( imagettftext() ) und UTF-8-Zeichen

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! 🙂

InformationsquelleAutor Pankucins | 2012-02-26
Schreibe einen Kommentar