สวัสดีครับ คราวนี้ผมนำเอาฟั่งชั่นเพื่อตัดตัวอักษรพิเศษต่างๆในข้อความให้ออกได้อย่างหมดจดเกลี้ยงเกลา มาให้นะครับ
ถ้าถามว่าไอฟั่งชั่นเนี้ย มันมีประโยชน์อะไร ก็คือเราสามารถนำค่าที่ไม่มีอักขระพิเศษไปใช้เพื่อทำ SEO Url ได้ โดยฟั่งชั่นที่ว่าเราจะใช้ Regexe ผ่านฟั่งชั่น preg_replace ใน php กัน โดยเราต้องเขียน Regexe ดังนี้
#[^a-zA-Z0-9]#u
และนี่เป็นฟั่งชั่นสำเร็จครับ
function removespecialchars($raw){
return preg_replace('#[^a-zA-Z0-9]#u', '', $raw);
}
เวลาจะเรียกใช้ก็เช่น removespecialchars(‘☼ Thaiseoboard ไทยเสียว ☼’); ก็จะได้ค่ากลับมาเป็น Thaiseoboard
แล้วถ้าเราไม่อยากตัดตัวอักษรภาษาไทยละ เราก็เพิ่มเคส ก-๙ ลงไปใน Regexe (สำหรับภาษาไทยจะต้องใช้ ก-๙ นะครับ ไม่ใช่ ก-ฮ)
ก็จะได้เป็น preg_replace(‘#[^ก-๙a-zA-Z0-9]#u’, ”, $raw); ทีนี้เวลาเรียกใช้ removespecialchars(‘☼ Thaiseoboard ไทยเสียว ☼’); จะทำให้ได้ค่ากลับมาเป็น Thaiseoboardไทยเสียว แล้วครับ
แต่ถ้าเราจะทำ SEO Url เราต้องแก้เพิ่มอีกนิดหน่อย เพราะสังเกตมั้ยว่า SEO Url จะต้องมี – คั่นกลางระหว่างคำ (ซึ่งกูเกิ้ลเค้าก็ระบุอย่างนั้น)
โดยเราจะเปลี่ยนพารามิเตอร์หลังของ preg_replace ให้เป็น – และ เพิ่มเคส – ไว้หน้า ก-๙ จะได้ว่า preg_replace(‘#[^-ก-๙a-zA-Z0-9]#u’, ‘-’, $raw);
ทีนี้เราก็จะสร้าง SEO Url ได้เป็น -Thaiseoboard-ไทยเสียว- แต่ติดอยู่นิดตรงที่ถ้ามีอักษระพิเศษติดกันเกินกว่า 2 ตัว หรือขึ้นต้นลงท้ายด้วยอักษระพิเศษเช่น ☼☼Thaiseoboard☼☼☼ไทยเสียว ค่าที่ได้จะออกมาเป็น –Thaiseoboard—ไทยเสียว ซึ่งมีขีดนำหน้าสองขีดและมีขีดถึงสามขีดติดกัน ยิ่งถ้าในข้อความมีอักษระพิเศษติดกันเยอะๆและหลายชุด จะทำให้ URL ดูไม่สวยงามและไม่เป็นประโยชน์ทาง SEO อีกด้วย
ดังนั้นที่เราจะต้องทำคือ replace – ที่มากกว่า 1 ให้เหลือเพียงอันเดียว โดยเพิ่ม ereg_replace(“-+”,“-”,$raw); เข้าหลังจากทำการตัดอักษระพิเศษออกแล้ว และตรวจสอบว่าค่าที่ได้ขึ้นต้นหรือลงท้ายด้วย – รึเปล่า ถ้าใช่ เราจะตัดออกไป ทีนี้เราก็จะได้ฟังชั่นสำเร็จออกมาเป็น
function seotitle($raw){
$raw = preg_replace('#[^-ก-๙a-zA-Z0-9]#u', '', $raw);
$raw = ereg_replace("-+","-",$raw);
if(substr($raw,0,1) == '-')
$raw = substr($raw,1);
if(substr($game_url,-1) == '-')
$raw = substr($raw,0,-1);
return urlencode($raw);
}
จากนั้นพอเราลองใช้ seotitle(‘☼☼Thaiseoboard☼☼☼ไทยเสียว’); จะได้ค่าออกมาเป็น Thaiseoboard-ไทยเสียว ซึ่งเป็นผลที่น่าพอใจทีเดียว