ปัญหาของคำสั่ง header บนไฟล์ประเภท UTF-8 BOM
หน้าแรก PHP MySQL เกร็ดความรู้ ปัญหาของคำสั่ง header บนไฟล์ประเภท UTF-8 BOM
| เวลาเขียนเว็บด้วย php ผมชอบใช้ Dreamweaver แต่ก็มีบ้างที่ใช้ Opensource ตัวอื่นๆ เช่น Notepad++ ไฟล์ที่สร้างขึ้นมาทั้งหมดผมจะกำหนดให้เป็น utf-8 เสมอ แต่ก็อาจเจอปัญหาแปลกๆได้บ้าง เช่นปัญหานี้ | |
| ปัญหาที่ว่าคือ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ซึ่งโดยปกติ ปัญหานี้จะเกิดจากการที่มีการส่งหรือสั่งให้แสดงข้อความใดๆออกไปก่อนที่จะเรียกใช้คำสั่ง header แต่คราวนี้คำสั่งของผมมีแค่ 1 บรรทัดเท่านั้น | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| หลังจากระดมสมองของ Admin มาช่วยกันหาคำตอบ จึงได้พบความจริงเกี่ยวกับเรื่องนี้ จำเลยของคดีคือ BOM ครับ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| BOM คืออะไร | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| BOM หรือ Byte Order Mark คือ signature แบบหนึ่งที่ใช้ระบุชนิดของ Endianness มีการใช้ในไฟล์ที่มีการเข้ารหัสข้อมูลแบบ UTF-16 หรือ UTF-32 ซึ่งมีการใช้ Byte 2 หรือ 4 byte ในการเก็บอักขระ 1 ตัว และมีการเรียงลำดับ Byte ที่ต่างกัน คือ little-endian และ big-endian ในขณะที่ไฟล์ที่เข้ารหัสข้อมูลแบบ UTF-8 ใช้ byte 1 byte ในการเก็บอักขระ 1 ตัว จึงไม่จำเป็นต้องใส่ BOM เข้าไป (ใส่ได้ไม่ผิดและมีบาง editor ที่ใส่ให้ครับ) ถ้าไฟล์ไหนมีการใส่ BOM จะมีอักขระ เหล่านี้ใส่ไว้ที่ต้นไฟล์
ถ้าเราใส่ BOM เข้าไป เราอาจมองไม่เห็นชุดอักขระที่เป็น BOM ใน Editor (เพราะใน UTF-8 จะไม่แสดงให้เห็นอักขระใดๆ จะมีเพียงช่องว่างเท่านั้น) วิธีการตรวจสอบง่ายๆคือลองเปลี่ยน Page Encoding ที่ตัว Browser เป็น Latin หรือ ISO-8859-1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ก็จะได้เจอหน้าผู้ร้ายตัวจริงของงานนี้ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| เมื่อรู้สาเหตุก็ลองตามไปแก้่ครับ โดยการกำหนดในส่วนของ Encoding ของ Page นั้น | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| เอาเครื่องหมายถูกในกรอบสีแดงออก แล้ว Apply ครับ แค่นี้ก็สามารถจัดการปัญหานี้ได้แล้ว | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
refer: http://fradius.coe.psu.ac.th/content/view/132/1/
ขึ้นไปด้านบน





