ฟังก์ชัน GD ของ PHP imagettftext() ควรคำนึงถึงการเข้ารหัสอักขระเริ่มต้น
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-06-07 15:15:31
ฉันกำลังพัฒนาฟังก์ชันเล็กๆ ในปัจจุบัน ซึ่งคล้ายกับลายเซ็นในฟอรัมส่วนตัว โดยจะสร้างรูปภาพพร้อมข้อความตามข้อมูลสมาชิกโดยอัตโนมัติ การต่อภาพสามารถทำได้โดยใช้ฟังก์ชันต่างๆ เช่น imagecopy() และ imagecopyresampled() อย่างไรก็ตาม เมื่อพูดถึงการวาดข้อความ ฉันพบปัญหา เทมเพลตข้อความจะถูกบันทึกในไฟล์ข้อความ ขั้นแรกโปรแกรมจะอ่านไฟล์และแทนที่ตัวแปรในนั้นด้วยข้อมูล จากนั้นใช้ฟังก์ชัน imagettftext() เพื่อวาดภาพลงบนรูปภาพ น่าเสียดายที่ภาพที่วาดนั้นอ่านไม่ออก @_@ ...ดังนั้นฉันจึงค้นหาปัญหาที่เกี่ยวข้องบน Google และพบว่าคนส่วนใหญ่บอกว่าสตริงที่ส่งผ่านในฟังก์ชัน imagettftext() จำเป็นต้องเข้ารหัส UTF-8 และคู่มือ PHP อย่างเป็นทางการก็ระบุไว้อย่างชัดเจนว่า "สตริงที่เข้ารหัส UTF-8 " สามารถส่งผ่านได้โดยตรง" แต่ปัญหาคือการเข้ารหัสไฟล์เทมเพลตเดิมเป็น UTF-8 ซึ่งค่อนข้างน่างงเล็กน้อย ด้วยความสิ้นหวัง ฉันใช้ EmEditor เพื่อเปิดไฟล์เทมเพลตต้นฉบับ ลองแปลงเป็นการเข้ารหัสอื่น และเปรียบเทียบกับเอาต์พุตโค้ดที่อ่านไม่ออกของ GD ปรากฎว่าเมื่อฉันแปลงเป็นการเข้ารหัส EUC-JP มันตรงกับโค้ดที่อ่านไม่ออกจริงๆ เอาต์พุตโดย GD... กล่าวคือ การเข้ารหัสเริ่มต้นของ GD บนเซิร์ฟเวอร์ที่นี่คือ EUC-JP และนั่นคือการเข้ารหัสภาษาญี่ปุ่น ฉันค้นหาการตั้งค่าของ php.ini และไม่พบตัวเลือกที่เกี่ยวข้อง ดังนั้นจึงมีคำถามอื่นเกิดขึ้น Niu น้องชายของ Si Wen เป็นผู้ค้นพบว่ามีพารามิเตอร์ "--enable-gd-jis-conv" ในพารามิเตอร์การคอมไพล์ PHP ที่น่าสงสัยมาก Google พบว่าปัญหาที่อ่านไม่ออกหลายอย่างเกี่ยวข้องกับพารามิเตอร์การคอมไพล์นี้... เป็นทางการ คำอธิบายพารามิเตอร์ มันคือ "GD: เปิดใช้งานการสนับสนุนแบบอักษรภาษาญี่ปุ่นที่แมป JIS" ซึ่งหมายความว่า GD รองรับแบบอักษรที่เข้ารหัสภาษาญี่ปุ่น (ให้ตายเถอะ ทำไมไม่มีตัวเลือกการคอมไพล์เพื่อรองรับแบบอักษรที่เข้ารหัสภาษาจีน ... PHP ยังเลือกปฏิบัติหรือไม่ nationality = =b) พูดตรงๆ ให้เปิดใช้งาน หากเปิดใช้งานตัวเลือกนี้ GD จะแมปส่วนที่มากกว่า 127 ในไลบรารีฟอนต์ TTF (นั่นคือ ส่วนที่ไม่ได้อยู่ในไลบรารีฟอนต์ละตินมาตรฐาน) ตาม ตามลำดับของ JIS ของญี่ปุ่น จากนั้นจะกลายเป็นสิ่งที่อ่านไม่ออกตามธรรมชาติเมื่อใช้ในการจับคู่แบบอักษรจีน เพื่อเป็นการไม่ให้เสียเวลา ให้ลบตัวเลือกนี้ออกแล้วคอมไพล์ใหม่ ปัญหาจะได้รับการแก้ไข หลังจากลบตัวเลือกนี้แล้ว การเข้ารหัสเริ่มต้นของ imagettftext() จะกลายเป็น UTF-8 และภาษาจีนสามารถแสดงผลได้ตามปกติ~