La fonction GD de PHP imagettftext() doit prêter attention à l'encodage des caractères par défaut
Auteur:Eve Cole
Date de mise à jour:2009-06-07 15:15:31
Je développe actuellement une petite fonction, similaire à une signature de forum personnalisée. Elle génère automatiquement une image avec du texte en fonction des informations des membres. L'assemblage d'images peut être effectué à l'aide de fonctions telles que imagecopy() et imagecopyresampled(). Cependant, lorsqu'il s'agit de dessiner du texte, je rencontre un problème. Le modèle de texte est enregistré dans un fichier texte. Le programme lit d'abord le fichier et remplace les variables qu'il contient par des données, puis utilise la fonction imagettftext() pour le dessiner sur l'image. Malheureusement, l'image dessinée est tronquée @_@. ... J'ai donc recherché des problèmes connexes sur Google et découvert que la plupart des gens disaient que la chaîne transmise dans la fonction imagettftext() devait être codée en UTF-8, et le manuel officiel de PHP indique également clairement "Chaîne codée en UTF-8". ." Il peut être transmis directement", mais le problème est que l'encodage du fichier modèle est à l'origine UTF-8, ce qui est un peu déroutant. En désespoir de cause, j'ai utilisé EmEditor pour ouvrir le fichier modèle d'origine, j'ai essayé de le convertir vers différents encodages et je l'ai comparé au code tronqué produit par GD. Il s'est avéré que lorsque j'ai converti en encodage EUC-JP, il correspondait en fait au code tronqué. sortie par GD... c'est-à-dire que l'encodage par défaut de GD sur le serveur ici est EUC-JP, et c'est un encodage japonais. J'ai recherché les paramètres de php.ini et n'ai trouvé aucune option pertinente, donc une autre question s'est posée. Où est cet ensemble d'encodage par défaut ? C'est Niu, le frère de Si Wen, qui a découvert qu'il y avait un paramètre "--enable-gd-jis-conv" dans les paramètres de compilation PHP qui était très suspect. Google a découvert que de nombreux problèmes tronqués étaient liés à ce paramètre de compilation... Officiel. description du paramètre Il s'agit de "GD : Activer la prise en charge des polices japonaises mappées JIS.", ce qui signifie que GD prend en charge les polices codées en japonais (bon sang, pourquoi n'y a-t-il pas d'option de compilation pour prendre en charge les polices codées en chinois... PHP fait-il également de la discrimination contre nationalité = =b), pour parler franchement, activez-la. Si cette option est activée, GD mappera les parties supérieures à 127 dans la bibliothèque de polices TTF (c'est-à-dire les parties qui n'appartiennent pas à la bibliothèque de polices latines standard) selon à l'ordre du JIS japonais, puis il deviendra naturellement tronqué lorsqu'il sera utilisé pour mapper des polices chinoises. Sans plus tarder, supprimez cette option et recompilez, et le problème sera résolu. Après avoir supprimé cette option, l'encodage par défaut de imagettftext() devient UTF-8 et le chinois peut être affiché normalement~