การตัดคำภาษาไทย

เนื่องจากปัจจุบันเว็บทุกภาษาทั่วโลกหันมาใช้ utf-8 กันเป็นส่วนใหญ่ เรียกได้ว่าเกือบทั้งหมดก็ว่าได้ในเว็บรูปแบบใหม่ ๆ มันก็อาจจะเกิดปัญหาการตัดคำโดยใช้ฟังค์ชั่น sub_str(); ซึ่งหลายคนอาจจะรู้เทคนิคนี้แล้ว แต่หลายคนอาจจะไม่รู้ ลองมาดูปัญหากันก่อนดีกว่าครับ

echo substr($detail,0,500); 

ผลที่ได้คือแบบนี้ครับ  ตัดคำไม่สวยเลย เพราะฉะนั้นเราจะใช้คำสั่ง sub_str(); ในภาษาไทยไม่ได้  เราต้องใช้คำสั่งนี้ครับ iconv_substr(); ครับ

 echo iconv_substr($detail, 0,200, "UTF-8"); 

ดูมันตัดคำสวยขึ้นใช่ป่าวครับและทำไมถึงใส่ค่าตัวเลขน้อยลง เป็นเพราะว่าเมื่อทำเป็น utf-8 แล้วจำนวนตัวอักษรจะลดลงหาร 3 จากคำสั่ง sub_str และเกตุเห็นว่า ... ทำไมมันตกลงไปด้านล่าง เป็นเพราะว่าในตัวแปร detail มันมี tag ฝังอยู่ในนั้นด้วยครับ ในการแสดงรายละเอียดย่อยแบบนี้เราจำเป็นต้องเอา tag html ออกให้หมด ซึ่งจะเราจะใช้คำสั่งนี้ครับ strip_tags();  เป็นคำสั่งในการตัด tag html ออก เราสามารถกำหนดว่าจะเอา tag ไรออกบ้างได้แต่ถ้าไม่กำหนดก็คือ เอาออกให้หมด ผมจะไม่อธิบายส่วนนี้มา สามารถดูรายละเอียดที่ http://www.php.net/manual/en/function.strip-tags.php  เองนะครับ

echo iconv_substr(strip_tags($detail), 0,200, "UTF-8");

เกือบสวยแล้วครับ จะเห็นได้ว่ามันจะมี &nbs มาต่อท้ายด้วยก็สัญนิฐานเลยว่าคือคำสั่ง   ของ html นั่นเอง  ซึ่งเป็นเพราะข้อจำกัดของฟังค์ชั่นนี้ มันไม่เอาพวกสัญลักษณ์ออกไปด้วย ตัดออกเฉพาะ tag html เราจึงจำเป็นต้องเขียนฟังค์ชั่น strip_tags(); ขึ้นมาเพิ่มเติม ดังนี้ครับ

function stripTags($text, $tags){
  
		  // replace php and comments tags so they do not get stripped  
		  $text = preg_replace("@<\?@", "#?#", $text);
		  $text = preg_replace("@<!--@", "#!--#", $text);
		  $text = str_replace("&nbsp;","",$text);
		  $text = str_replace("&ndash;","",$text);
		    $text = str_replace("\n;","",$text);
		  // strip tags normally
		  $text = strip_tags($text, $tags);
		  
		  // return php and comments tags to their origial form
		  $text = preg_replace("@#\?#@", "<?", $text);
		  $text = preg_replace("@#!--#@", "<!--", $text);
		  
		  return $text;
}
//เครดิตใครจำไม่ค่อยได้ละครับ แต่ผมเป็นคนดัดแปลงโค๊ดให้เป็้นแบบนี้

เมื่อมีฟังชั่นแล้วก็เรียกใช้ครับ ดังนี้ครับ

echo iconv_substr(stripTags($detail,""), 0,200, "UTF-8");

ผลลัพก็จะได้เป็นดังตัวอย่าง การส่งค่า stripTags(); มันจะมี 2 พารามิเตอร์นะครับ แต่เราส่งตัวเดียวเพราะว่าเราต้องการตัดทุก tag ออก  ลองเอาไปใช้ดูนะครับเทคนิคนี้เผื่อเป็นประโยชน์ในการทำเว็บ

วันที่ 20 ก.ค. 54 เวลา 17:08:48 น.