การตัดคำภาษาไทย
เนื่องจากปัจจุบันเว็บทุกภาษาทั่วโลกหันมาใช้ 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(" ","",$text);
$text = str_replace("–","",$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 น.