Die GD-Funktion imagettftext() von PHP sollte auf die Standardzeichenkodierung achten
Autor:Eve Cole
Aktualisierungszeit:2009-06-07 15:15:31
Ich entwickle derzeit eine kleine Funktion, die einer personalisierten Forum-Signatur ähnelt. Sie generiert automatisch ein Bild mit Text darauf, basierend auf den Mitgliederinformationen. Das Zusammenfügen von Bildern kann mit Funktionen wie imagecopy() und imagecopyresampled() erfolgen. Beim Zeichnen von Text stoße ich jedoch auf ein Problem. Die Textvorlage wird in einer Textdatei gespeichert. Das Programm liest die Datei zunächst, ersetzt die darin enthaltenen Variablen und zeichnet sie dann mit der Funktion imagettftext() auf das Bild. Leider ist das gezeichnete Bild verstümmelt. ... Also habe ich bei Google nach verwandten Problemen gesucht und festgestellt, dass die meisten Leute sagen, dass die in der Funktion imagettftext() übergebene Zeichenfolge UTF-8-codiert sein muss, und im offiziellen PHP-Handbuch steht auch eindeutig „UTF-8-codierte Zeichenfolge“. „Es kann direkt übergeben werden“, aber das Problem besteht darin, dass die Codierung der Vorlagendatei ursprünglich UTF-8 ist, was etwas rätselhaft ist. In meiner Verzweiflung öffnete ich mit EmEditor die ursprüngliche Vorlagendatei, versuchte sie in andere Kodierungen zu konvertieren und verglich sie mit dem von GD ausgegebenen verstümmelten Code. Bei der Konvertierung in die EUC-JP-Kodierung stellte sich heraus, dass sie tatsächlich mit dem verstümmelten Code übereinstimmte Ausgabe durch GD ... das heißt, die Standardkodierung von GD auf dem Server hier ist EUC-JP, und das ist eine japanische Kodierung. Ich habe die Einstellungen von php.ini durchsucht und keine relevanten Optionen gefunden, daher kam eine weitere Frage auf: Wo ist diese Standardkodierung eingestellt? Es war Si Wens Bruder Niu, der entdeckte, dass es in den PHP-Kompilierungsparametern einen „--enable-gd-jis-conv“-Parameter gab, der sehr verdächtig war. Google stellte fest, dass viele verstümmelte Probleme mit diesem Kompilierungsparameter zusammenhingen ... Offiziell Parameterbeschreibung Es ist „GD: JIS-zugeordnete Unterstützung japanischer Schriftarten aktivieren“, was bedeutet, dass GD japanisch codierte Schriftarten unterstützt (verdammt, warum gibt es keine Kompilierungsoption zur Unterstützung chinesisch codierter Schriftarten ... Diskriminiert PHP auch? Nationalität = =b), um es klar auszudrücken: Aktivieren Sie diese Option. Wenn diese Option aktiviert ist, ordnet GD die Teile größer als 127 in der TTF-Schriftartenbibliothek zu (dh die Teile, die nicht zur Standard-Latein-Schriftartenbibliothek gehören). in der Reihenfolge des japanischen JIS, und dann wird es natürlich verstümmelt, wenn es zum Zuordnen chinesischer Schriftarten verwendet wird. Entfernen Sie ohne weiteres diese Option und kompilieren Sie sie erneut, und das Problem wird gelöst. Nach dem Entfernen dieser Option wird die Standardcodierung von imagettftext() zu UTF-8 und Chinesisch kann normal angezeigt werden~