PHP เบื้องต้น > การควบคุมข้อความและนิพจน์ปกติี่
ชุดตัวอักษรและ Unicode
ตามปกติ PHP นำเสนอข้อความเป็นตัวอักษร 8 บิตตาม ISO-8859-1 ซึ่งสามารถแสดงได้ 256 ตัวอักษร ดังนั้นจึงไม่สามารถแสดงพยัญชนะที่ต้องการมากกว่านี้ได้ เช่น จีนหรือญี่ปุ่นได้
PHP มีส่วนขยาย mbstring ช่วยแก้ไขปัญหานี้ ก่อนอื่นควรเรียนรู้เกี่ยวกับ "ชุดตัวอักษร" (Character Set หรือ charset) และการทำงานของคอมพิวเตอร์กับพยัญชนะต่างๆ
ASCII
การพัฒนาคอมพิวเตอร์ในตอนต้นได้สร้างการจับคู่ระหว่างรหัสดิจิตอลกับตัวอักษรพิมพ์ได้ แต่ไม่ค่อยเหมาะสมกับธรรมชาติระบบไบนารีของคอมพิวเตอร์ ในปี 1963 American Standard Association ได้ประกาศมาตรฐาน American Standard Code for Information Interchange หรือ ASCII โดยเป็นตัวอักษร 7 บิตที่ครอบคลุมตัวอักษรลาตินที่ใช้เป็นพยัญชนะภาษาอังกฤษ ตัวเลข เครื่องหมาย และสัญลักษณ์ทางการเงิน
ระบบนี้ไม่สามารถรองรับภาษาในยุโรปตะวันตก เช่น ฝรั่งเศส สเปน รวมถึงภาษา ไซริลลิค อาร์เมเนียและฮิบรู
ชุดตัวอักษร ISO 8859
คอมพิวเตอร์ปัจจุบันสามารถเก็บข้อมูลเป็นตัวอักษร 8 บิตและ ASCII 7 บิตด้วยการบิตสูง (high bit) เป็น parity bit (สำหรับการตรวจสอบการรวมข้อมูล)
ชุดตัวอักษรของอนุกรม ISO 8859 หรือเรียกว่า code page เริ่มจาก ISO 8859-1 กำหนด "พยัญชนะลาตินหมายเลข 1" หรือ Latin-1 เป็นชุดตัวอักษรครอบคลุมภาษายุโรปตะวันตกหลักได้ จนถึงปี 1999 มีอนุกรม 15 ชุด ภาษาไทยอยู่ในอนุกรม 11 ในอนุกรม 15 ปี 1999 ได้เพิ่มสัญลักษณ์เงินยูโร ( ) อนุกรมอื่นๆได้ครอบคลุมภาษา
สล๊าฟ และไซริลลิค เช่น รัสเซีย ฮิบรู และตรุก
ชุดตัวอักษรยังสอดคล้องกับ ASCII อย่างเต็มที่และใช้ 127 อักษรล่างร่วมกัน ในระบบปฏิบัติการ Microsoft Windows ได้ปรับปรุง code page เล็กน้อยเป็น windows-1252 หรือ cp-1252 สำหรับภาษาอังกฤษ (1251 สำหรับภาษารัสเซีย เป็นต้น) ภาษาไทยสามารถใช้ได้กับชุดตัวอักษร charset=windows-874 นอกจากนี้ ภาษาไทยยังสามารถใช้กับ charset=tis-620
ภาษาตะวันออกไกล
ภาษาตะวันออกไกลกลุ่มนี้คือ จีน ญี่ปุ่น และเกาหลี ใช้ตัวอักษรจำนวนมาก การพัฒนาเริ่มต้นในญี่ปุ่นกับตัวอักษรคาตาคะนะ และเพิ่มตัวอักษรคานจิ (อักษรจีน) ในภายหลัง Microsoft พัฒนา "Shift-JIS" หรือรู้จักในชื่อ DBCS (Double-Byte Character Set)
ในปัจจุบันมีมาตรฐาน GB 2312-80 สำหรับตัวอักษรจีนอย่างง่าย Big-5 สำหรับตัวอักษรจีนดั้งเดิม และ UHC (Unified Hangul Code) สำหรับภาษาเกาหลี
Unicode
Unicode (มาจาก Universal Code) ได้รับการพัฒนาตั้งแต่ทศวรรษ 1980 เพื่อให้ครอบคลุมทุกภาษา ต่อมาได้กลายเป็น ISO 10464
มาตรฐานเริ่มแรกเป็นตัวอักษร 16 บิตที่สอดคล้องกับตัวอักษร ASCII ใน 127 สล๊อตแรก นอกจากจะสนับสนุนพยัญชนะลาตินแล้ว ยังสนับสนุนภาษาอื่น เช่น อาเมเนีย กรีซ ไทย จีน ญี่ปุ่น และเกาหลีด้วย
ตัวอักษร 16 บิตนี้ยังไม่สามารถรองรับตัวอักษรในภาษาจีน ญี่ปุ่น และเกาหลี ที่มีมากกว่า 70,000 ตัวอักษรได้ จึงมีการพัฒนาเป็นระบบ 32 บิตทำให้สามารถรองภาษาปัจจุบันและภาษาที่ตายแล้วได้ ระบบนี้ไม่เพียงรองรับมาตรฐาน 16 บิตและ 32 บิตแล้ว ยังรองรับตัวอักษรบิตเดียวด้วย
การเข้ารหัส unicode ที่ใช้กันมากคือ
- UTF-7 เป็นการเข้ารหัส 7 บิตสำหรับการรองรับ ASCII 7 บิตและใช้อีก 1 หรือ 2 สล๊อตเพื่อระบุไบต์ขยายสำหรับตัวอักษรอื่น
- UTF-8 เป็นการเข้ารหัส ASCII เต็มใน 127 สล๊อตแรกและใช้ schema เข้ารหัสส่วนที่เหลือ
- UTF-16 เป็นการเข้ารหัสคำ 16 บิต ภาษาหลักยังคงอยู่ใน 16 บิตแรก
- UTF-32 เป็นการเข้ารหัสคำ 2 เท่า (double word หรือ DWORD) 32 บิต นอกจากนี้ยังสนับสนุน หลายตัวอักษร DWORD สำหรับตัวอักษรเพิ่มเติมในอนาคต
การประกาศ
การบอกให้ลูกข่ายทราบถึงการแสดงผลปัจจุบันบน HTML ให้ประกาศคำสั่งที่ส่วนหัว
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
ส่วน charset ที่กำหนดมีผลให้ browser จะรับทราบและแสดงผลตามที่ระบุ
การคอนฟิก PHP สำหรับ Unicode
การคอนฟิก PHP ให้ทำงานกับข้อความและนิพจน์ปกติหลายไบต์ ให้ตรวจสอบการระบุคำสั่ง
--enable-mbstring
--enable-mbregex
ใน Windows ให้แก้ไขไฟล์ php.ini ที่เก็บในไดเรคทอรีรากของ Windows (ปกติคือ C:\Windows) หรือไดเรคทอรีที่ติดตั้ง PHP ตรวจว่าได้ยกเลิก comment คือลบเครื่องหมาย semicolon (;) หน้าคำสั่ง
extension=php_mbstring.dll
รวมทั้งต้องตรวจสอบว่าได้เก็บ dynamic link library (DLL) ส่วนขยาย mbstring หรือ php_mbstring.dll ในไดเรคทอรีที่เหมาะสม โดย PHP จะค้นหาส่วนขยายตามการตั้งค่าตัวเลือกคอนฟิก extension_dir ในไฟล์ php.ini
extension_dir="c:\php\ext"
หรือ
extension_dir = "C:\AppServ\php5\ext"
|