การตัด 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 ]] )
ShareEnjoy this article?
Consider subscribing to our RSS feed!

15:19 on June 23rd, 2010
ขอบคุณคับ ดูเหมือนไม่อะไร แต่พอทำเยอะๆ แล้วเรื่องภาษาเอาปวดหัวอย่างแรง ดีนะเนี่ยมาเห็นบทความนี้ไม่งั้นก็ ตกบ่อตกหลุมเหมือนกันคับ 555+