Byte Order Mark : BOM

ขณะที่กำลังหัดเขียนสคริปต์ PHP ตามแบบฝึกหัดที่เกี่ยวกับกับฟังก์ชัน session_start() ผมได้กำหนดให้คริปต์ที่เขียนมีการ Endoding แบบ UTF-8 ปรากฎว่ามีความผิดพลาดเกิดขึ้น จึงเริ่มจำกัดขอบเขตของปัญหาโดยตัดสิ่งที่ไม่เกี่ยวข้องออกจนหมด จนเหลือสคริปต์บรรทัดเดียว คือ

session_start();

เมื่อลองรัน PHP ก็ยังพบคำเตือนเหมือนเดิม
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent

หลังจากลองอะไรเรื่อยเปื่อยหลายชั่วโมงผมก็ได้คำตอบว่า แฟ้มที่จะถูก Encoding ด้วย UTF-8 อาจจะมีการฝังอักขระตัวหนึ่งทีชื่อ Byte Order Mark (BOM)ไปไว้ตัวแรกสุด เพื่อช่วยบอกรายละเอียดในการ Encoding ทำให้มีปัญหากับบางฟังก์ชัน โดยเฉพาะฟังก์ชันบางตัวที่จะทำงานตามปกติก็ต่อเมือถูกเรียกให้ทำงานเป็นส่วนแรกสุดของสคริปต์


แม้เราจะไม่ได้สั่งให้แทรกอักขระ โปรแกรม Editor ที่เราใช้งานอยู่ก็หวังดีใส่ไปให้ ดังนั้นเราต้องตรวจสอบด้วยว่าสคริปต์ของเราจะไม่มี BOM อยู่ และขอแนะนำข้อมูลที่เกี่ยวกับ BOM สำหรับอ่านเพิ่มเติมดังต่อไปนี้

1. คำอธิบายคร่าวๆ เกี่ยวกับ BOM จากกระทู้ใน paradizex
2. คำอธิบายเกี่ยกับความผิดพลาด cannot modify header ปัญหาที่พบคงจะเป็นกรณีที่ 3 เพราะถือได้ว่า BOM เป็นอักขระ White Space อีกตัวหนึ่ง

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

C001-2.1 ดีไวซ์ไดรเวอร์ และโปรแกรมดีไวซ์เมเนเจอร์

การทำตัวอักษรเส้นประ

Jonathan Livingston : Seagull