การตัด string utf-8 ภาษาไทย by rainbow
May1
ขออธิบายปัญหาก่อนนะครับ คือ string utf-8 ภาษาไทยเนี่ย ถ้าเอามา strlen แล้วตัวอักษรตัวนึงจะมีความยาวประมาณ 3 ตัวอักษรภาษาอังกฤษครับ ทีนี้การจะตัดตัวอักษรมาบายส่วนจะทำได้ยาก เพราะ เราไม่รู้ว่ามันเริ่มที่ตัวอักษรที่เท่าไหร่ และมีขนาดเท่าไหร่ หลังจากตบตีกับปัญหานี้มาหลายครั้ง จนเมื่อไม่นานมานี้เพิ่งพบวิธีแก้
ซึ่งแต่เดิม ผมจะใช้วิธี(ของเพื่อน)แบ่งตัวอักษรออกมาเป็นตัวๆก่อนครับ โค้ดที่ใช้แยก คือ
function utf8_2arr( $str ) { $ret = array(); $i = 0; $len = strlen ($str); while ($i < $len) { $j = 0; $chr = ord ($str[$i]); $j++; if ($i + $j >= $len) { $ret[] = substr( $str, $i, $j ); break; } if ($chr & 0x80) { $chr <<= 1; while ($chr & 0x80) { $j++; $chr <<= 1; } } $ret[] = substr( $str, $i, $j ); $i += $j; } return $ret; }
ฟังชั่นนี้จะแบบ string ออกเป็น array ไว้ครับจะใช้ตัวอักษรลำดับที่เท่าไหร่ถึงเท่าไหร่ก็เลือกได้ครับ
แต่อย่างที่บอกไปแล้วครับ ว่าเพิ่งจะไปพบวิธีแก้ใหม่มา คือที่จริงแล้ว php เองมี function ให้ใช้อยู่แล้วตั้งแต่ php 4.0.6!!! อาว แล้วผมไปอยู่รูไหนมาเนี่ย ไม่รู้ว่ามี function ให้ใช้อยู่แล้ว ว่าแล้วก็เลยมาเขียนบล็อกระบาย + โชว์โง่ตัวเอง T-T ก็ขอจบบล็อกนี้เพียงเท่านี้ครับ อะ ลืมบอกฟังก์ชัน
string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )
Enjoy this article?
Consider subscribing to our RSS feed!
15:19 on June 23rd, 2010
ขอบคุณคับ ดูเหมือนไม่อะไร แต่พอทำเยอะๆ แล้วเรื่องภาษาเอาปวดหัวอย่างแรง ดีนะเนี่ยมาเห็นบทความนี้ไม่งั้นก็ ตกบ่อตกหลุมเหมือนกันคับ 555+