การตัด string utf-8 ภาษาไทย by

28
May
1

ขออธิบายปัญหาก่อนนะครับ คือ 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!

1 ความเห็น

  1. คณากร เนียวกุล
    15:19 on June 23rd, 2010

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

ใส่ความเห็น

RSS feed for comments on this post