Fungsi GD PHP imagettftext() harus memperhatikan pengkodean karakter default
Penulis:Eve Cole
Waktu Pembaruan:2009-06-07 15:15:31
Saya sedang mengembangkan fungsi kecil hari ini, yang mirip dengan tanda tangan forum yang dipersonalisasi. Fungsi ini secara otomatis menghasilkan gambar dengan teks berdasarkan informasi anggota. Penggabungan gambar dapat dilakukan menggunakan fungsi seperti imagecopy() dan imagecopyresampled(). Namun, saat menggambar teks, saya menemui masalah. Templat teks disimpan dalam file teks. Program pertama-tama membaca file dan mengganti variabel di dalamnya dengan data, lalu menggunakan fungsi imagettftext() untuk menggambarnya pada gambar. ...Jadi saya mencari masalah terkait di Google dan menemukan bahwa kebanyakan orang mengatakan bahwa string yang diteruskan dalam fungsi imagettftext() harus dikodekan UTF-8, dan manual resmi PHP juga dengan jelas menyatakan "string yang dikodekan UTF-8 ." Bisa langsung diteruskan", tapi masalahnya pengkodean file template aslinya UTF-8, yang agak membingungkan. Dalam keputusasaan, saya menggunakan EmEditor untuk membuka file template asli, mencoba mengonversinya ke pengkodean yang berbeda, dan membandingkannya dengan keluaran kode kacau oleh GD. Ternyata ketika saya mengonversi ke pengkodean EUC-JP, ternyata cocok dengan kode kacau keluaran oleh GD... artinya, pengkodean default GD pada server di sini adalah EUC-JP, dan itu adalah pengkodean Jepang. Saya mencari pengaturan php.ini dan tidak menemukan opsi yang relevan, jadi pertanyaan lain muncul. Saudara laki-laki Si Wen, Niu, yang menemukan bahwa ada parameter "--enable-gd-jis-conv" dalam parameter kompilasi PHP yang sangat mencurigakan. Google menemukan bahwa banyak masalah kacau terkait dengan parameter kompilasi ini... Resmi deskripsi parameternya adalah "GD: Aktifkan dukungan font Jepang yang dipetakan JIS.", yang berarti GD mendukung font berkode Jepang (sialan, mengapa tidak ada opsi kompilasi untuk mendukung font berkode Cina...Apakah PHP juga mendiskriminasi kewarganegaraan = =b), terus terang, aktifkan Jika opsi ini diaktifkan, GD akan memetakan bagian yang lebih besar dari 127 di perpustakaan font TTF (yaitu, bagian yang bukan milik perpustakaan font Latin standar) sesuai dengan urutan JIS Jepang, dan secara alami akan menjadi kacau ketika digunakan untuk memetakan font Cina. Tanpa basa-basi lagi, hapus opsi ini dan kompilasi ulang, dan masalahnya akan terpecahkan. Setelah menghapus opsi ini, pengkodean default imagettftext() menjadi UTF-8, dan bahasa Mandarin dapat ditampilkan secara normal~