ทำเว็บไซต์ ban คำหยาบ คำโฆษณา ด้วย codeigniter

php-codeigniter-framework
php-codeigniter-framework

ทำเว็บไซต์ 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');
    
  • เรียกใช้งานฟังก์ชั่น word_censor ฟังก์ชั่น word_censor ต้องการพารามิเตอร์ 3 ส่วนคือ
    • $string พารามิเตอร์ตัวแรก คือข้อความที่เราต้องการตรวจสอบว่ามีคำหยาบหรือคำที่เราไม่ต้องการอยู่หรือไม่
    • $disallowed พารามิเตอร์ตัวที่สอง คือตัวแปร array ที่เก็บคำที่เราต้องการตรวจสอบพารามิเตอร์ตัวแรก
    • $replacement_word พารามิเตอร์ตัวสุดท้าย คือคำที่เราต้องการให้แทนที หากเจอคำที่ไม่เหมาะสมในรายการ
  • ตัวอย่างการใช้งาน word_censor
  • $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();
	}
}