"ALT+0160 หรือ ช่องว่าง", ตัวอักษรที่ trim เอาไม่ออก
โดยปกติ trim เป็นคำสั่งที่ช่วยกำจัด ช่องว่าง (Space) ที่อยู่ด้านหน้า หรือด้านหลังข้อความ
แต่เมื่อมีตัวอักษร "ช่องว่างแบบพิเศษ" ที่ trim เอาไม่ออก เราจะทำยังไงดี?
trim ใช้ทำอะไร?
คำสั่ง trim จะคอยลบช่องว่าง (Space) ที่อยู่ด้านหน้า หรือด้านหลังข้อความเช่น
" สวัสดีครับ " คำสั่ง trim จะทำให้ ข้อความนี้กลายเป็น
"สวัสดีครับ"
วิธีการใช้งานก็ง่ายนิดเดียวครับ
$text = " hello "; $text = trim($text); // $test จะมีค่าเท่ากับ "hello" เมื่อเรียกคำสั่ง trim ครับ
เมื่อ trim เอาช่องว่างออกไม่หมด
ผมขอยกตัวอย่างปัญหาที่เจอในเว็บบอร์ดของ SiamDev.net ละกันครับ ปัญหาก็คือ
ผมใช้คำสั่ง trim ในการลบช่องว่างด้านหน้าและหลังข้อความ ขอเรียกสั้นๆ ว่า "เล็มข้อความ" ละกันครับ
จากนั้น ผมจึงตรวจสอบข้อความที่เล็มแล้ว ว่า มีข้อความอยู่จริงๆ รึเปล่า หรือ ผู้ใช้แค่กดช่องว่างใส่มาเฉยๆ
โค้ดของผมมีลักษณะดังนี้ครับ
$topic = $_POST['topic']; $topic = trim($topic); if ($topic == "") echo "กรุณากรอกข้อความด้วยครับ!"; else echo "คุณกรอกข้อความมาจริงๆ ด้วย";
ผมพบว่า โค้ดข้างต้น ช่วยผมตรวจสอบว่าผู้ใช้ ได้กรอก "ชื่อกระทู้" รึเปล่า ได้อย่างถูกต้องครับ
แต่แล้ววันหนึ่งผมพบว่า มีกระทู้ที่ "ไม่มีชื่อ" (คือมีแต่ "ช่องว่าง") อยู่ในเว็บบอร์ดครับ ผมก็สงสัยว่าเป็นไปได้ไง
ถ้าเขากรอกข้อความว่า " " คำสั่ง trim ก็จะทำให้ข้อความเมื่อกี้กลายเป็น ""
ทีนี้โปรแกรมผมก็ต้องเตือนให้ผู้ใช้กรอกข้อความด้วย! แต่ทว่าโปรแกรมของผมไม่เตือนครับ ผมจึงออกตามหาคำตอบในอินเตอร์เน็ต
แล้วพบว่า....ตัวอักษรที่เขากรอกมาคือ "ช่องว่าง" ที่มีรหัส ASCII ไม่ตรงกับ "ช่องว่าง" ทั่วไป
ช่องว่าง ALT+0160 คืออะไร?
การกด ALT+0160 (ใช้ปุ่มตัวเลขใน Numpad ช่วยกดตัวเลขนะครับ) เป็นการกรอก "ช่องว่างแบบพิเศษ" ครับ
โดยทั่วไป ช่องว่าง (กด Space Bar) มีรหัส ASCII คือ 32 แต่ ช่องว่างแบบพิเศษของ Windows มีรหัส ASCII คือ 160 ครับ
ตัวอักษรนี้สามารถกรอกได้บน Windows และต้องใช้ Internet Explorer เท่านั้นครับ (เท่าที่ผมลองนะครับ)
ตัวอักษรนี้เป็นตัวอักษรที่ trim ไม่ทำการลบออกไปครับ เพราะ trim ถือว่าเป็นตัวอักษรธรรมดา เหมือน กับ a, b, c, ... ครับ
จะทำยังไงดีหละ?
โดยปกติเราจะใช้คำสั่ง trim แบบนี้
$text = trim($text);
แต่ถ้าจะจัดการ ALT+0160 ให้อยู่หมัดให้ใช้คำสั่ง trim แบบนี้ครับ
$text = trim($text, chr(160)." \t\n\r\0\x0B");
พารามิเตอร์ที่สองของ trim คือ รายชื่อตัวอักษรที่ต้องการให้ trim ลบออกให้ครับ ผมก็ใส่ chr(160) เพิ่มเข้าไป กับ รายการปกติ trim ก็จะช่วยเอาออกให้ครับ
หวังว่าเพื่อนๆ คงจะจัดการกับช่องว่างเหล่านี้ได้แล้วนะครับ ^_^
แหล่งอ้างอิง
- PHP: trim - http://th.php.net/manual/en/function.trim.php
ขอบคุณสำหรับความรู้นะครับ
ขอบคุณเช่นกันครับ ความรู้ใหม่เลย
ได้ความรู้เพิ่มเติมมากเลย ขอบคุณค่ะ
กำลังหา เลย ครับ ขอบคุณมากครับ
Post new comment