ทำเว็บไซต์ ban คำหยาบ คำโฆษณา ด้วย codeigniter
ทำเว็บไซต์ ban คำหยาบ คำโฆษณา ด้วย codeigniter
ในขั้นตอนของการพัฒนาเว็บไซต์ที่ต้องมีการรับ input แบบข้อความจากสมาชิกเข้ามาแสดงผลผ่านหน้าเว็บไซต์ ตัวอย่างเช่นการสร้างกระทู้ การ comment เว็บไซต์จำเป็นต้องมีระบบกรองข้อมูล เพราะบางทีอาจจะมีการใส่ข้อความที่เป็นคำหยาบ หรือในอีกกรณีคือเพื่อป้องกันการ spam ข้อความที่เป็นโฆษณา ที่เว็บไซต์ไม่ต้องการให้แสดงบนหน้าเว็บ
ใน php codeigniter framework มีระบบที่ใช้สำหรับกรองข้อมูลให้เราสามารถใช้งานได้อยู่แล้ว โดยสามารถเรียกใช้โดยการโหลด helper ที่ชื่อว่า text โดยระบบนี้เราสามารถกำหนดคำที่เราไม่ต้องการให้แสดงบนหน้าเว็บไซต์ และสามารถแทนคำนั้น ๆ ด้วยข้อความใหม่ ไอคอน อีโมติคอน หรือรูปภาพก็ได้
วิธีใช้งาน text helper กรองคำที่ไม่ต้องการ
- เปิดใช้งาน text helper โหลด helper ของ codeigniter ที่ construtor ของ controller ที่เราต้องการใช้งาน หรือเข้าไปกำหนดการโหลดแบบอัตโนมัติใน autoload.php
$this->load->helper('text');
- $string พารามิเตอร์ตัวแรก คือข้อความที่เราต้องการตรวจสอบว่ามีคำหยาบหรือคำที่เราไม่ต้องการอยู่หรือไม่
- $disallowed พารามิเตอร์ตัวที่สอง คือตัวแปร array ที่เก็บคำที่เราต้องการตรวจสอบพารามิเตอร์ตัวแรก
- $replacement_word พารามิเตอร์ตัวสุดท้าย คือคำที่เราต้องการให้แทนที หากเจอคำที่ไม่เหมาะสมในรายการ
$string = "What does shucks mean"; $replacement_word = "xxx"; $disallowed = array('darn', 'shucks', 'golly', 'phooey'); $string = word_censor($string, $disallowed, $replacement_word);
จากตัวอย่างโค๊ดด้านบน เราได้แทนทีคำในประโยค “What does shucks mean” ด้วยคำว่า “xxx” เพราะฉะนั้นตัวแปร $string สุดท้ายแล้วจะได้ผลลัพธ์เป็น
What does xxx mean
จากตัวอย่างการกรอกคำด้านบนจะเป็นภาษาอังกฤษ แต่เมื่อนำไปใช้งานจริง เราสามารถใช้ภาษาไทยได้เหมือนกันนะครับ
ประยุกต์ใช้ text helper กรอกข้อความจากฐานข้อมูล
ในการใช้งานจริง เราอาจจะไม่กรอกข้อมูลในขั้นตอนของการบันทึกข้อมูลลงฐานข้อมูล แต่จะกรองข้อมูล เมื่อต้องทำการ query ข้อมูลมาแสดงบนหน้าเว็บไซต์ ก็สามารถทำได้เหมือนกันครับ ตัวอย่างเช่น
$string = $this->model_content->getTopicByID($topic_id); $replacement_word = "xxx"; $disallowed = $this->model_content->getBadWordList(); $string = word_censor($string, $disallowed, $replacement_word);
จากโค๊ดตัวอย่างด้านบนคือ เราได้สร้าง model_content เพื่อใช้ในการ query ข้อมูลจากฐานข้อมูล แทนที่จะใช้ข้อมูลที่เป็น static เพราะฉะนั้น เมื่อมีการเพิ่ม bad word เข้าไปในฐานข้อมูล หรือมีการสร้างกระทู้ใหม่ ๆ ระบบก็จะทำงานอัตโนมัติ และแบนคำที่ไม่เหมาะสมก่อนนำไปแสดงบนหน้าเว็บไซต์เสมอ
ตัวอย่าง model_content และการ query ทั้ง 2 เมธอด
class Model_content extends CI_Model { function __construct() { parent::__construct(); } public function getTopicByID($topic_id) { $query = $this->db->query('SELECT * FROM topic WHERE topic_id = '.$topic_id); $row = $query->row(); return $row->content; } public function getBadWordList() { $query = $this->db->query('SELECT word FROM badword'); return $query->result_array(); } }