ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingเรื่อง Regular Expression ครับ ช่วยทีคร๊าบ
หน้า: 1 [2]  ทั้งหมด   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ  (อ่าน 5691 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #20 เมื่อ: 17 มีนาคม 2008, 16:54:52 »

ขอบคุณมากครับ มันยอดมากเลย

แล้วทีนี้ถ้าจะเช็คจำนวนตัวอักษร จะทำยังไงครับ ถ้าคำที่ใส่เข้ามามีทั้งภาษาไทยและอังกฤษ

ไม่ใช้ strlen ล่ะครับ ??

ถ้าเป็น ภาษาไทย UTF-8 มันนับ 3 อ่ะครับ
แต่ทำได้ละครับ ให้แปลงไปเป็น tis620 ก่อน แล้วถึงหาจำนวนตัวอักษร แล้วค่อยแปลงกลับ

โค๊ด:
function utf8totis620($string) {
  $str = $string;
  $res = "";
  for ($i = 0; $i < strlen($str); $i++) {
    if (ord($str[$i]) == 224) {
      $unicode = ord($str[$i+2]) & 0x3F;
      $unicode |= (ord($str[$i+1]) & 0x3F) << 6;
      $unicode |= (ord($str[$i]) & 0x0F) << 12;
      $res .= chr($unicode-0x0E00+0xA0);
      $i += 2;
    } else {
      $res .= $str[$i];
    }
  }
  return $res;
}

function tis2utf8($tis) {
   for( $i=0 ; $i< strlen($tis) ; $i++ ){
      $s = substr($tis, $i, 1);
      $val = ord($s);
      if( $val < 0x80 ){
         $utf8 .= $s;
      } elseif ( ( 0xA1 <= $val and $val <= 0xDA ) or ( 0xDF <= $val and $val <= 0xFB ) ){
         $unicode = 0x0E00 + $val - 0xA0;
         $utf8 .= chr( 0xE0 | ($unicode >> 12) );
         $utf8 .= chr( 0x80 | (($unicode >> 6) & 0x3F) );
         $utf8 .= chr( 0x80 | ($unicode & 0x3F) );
      }
   }
   return $utf8;
}

$name = utf8totis620($name);
echo strlen($name);
$name = tis2utf8($name);

ถ้ามีวิธีดีกว่านี้ แนะนำด้วยครับ

ปล. โค้ดแปลงไปมาระหว่าง tis620 กับ utf8 เอามาจากในเน็ต แต่จำไม่ได้เอามาจากเว็บไหน แต่ใช้ได้ผล

ขอบคุงมากเลยง้าบ ผมกำลังอยากได้ แปลงไปแปลงกลับพอดีเลย เจอแต่แปลงไปไม่มีแปลงกลับ
บันทึกการเข้า

thenetxx
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 41
ออฟไลน์ ออฟไลน์

กระทู้: 1,986



ดูรายละเอียด เว็บไซต์
« ตอบ #21 เมื่อ: 17 มีนาคม 2008, 17:39:48 »

ขอบคุณมากครับ มันยอดมากเลย

แล้วทีนี้ถ้าจะเช็คจำนวนตัวอักษร จะทำยังไงครับ ถ้าคำที่ใส่เข้ามามีทั้งภาษาไทยและอังกฤษ

ไม่ใช้ strlen ล่ะครับ ??

ถ้าเป็น ภาษาไทย UTF-8 มันนับ 3 อ่ะครับ
แต่ทำได้ละครับ ให้แปลงไปเป็น tis620 ก่อน แล้วถึงหาจำนวนตัวอักษร แล้วค่อยแปลงกลับ

โค๊ด:
function utf8totis620($string) {
  $str = $string;
  $res = "";
  for ($i = 0; $i < strlen($str); $i++) {
    if (ord($str[$i]) == 224) {
      $unicode = ord($str[$i+2]) & 0x3F;
      $unicode |= (ord($str[$i+1]) & 0x3F) << 6;
      $unicode |= (ord($str[$i]) & 0x0F) << 12;
      $res .= chr($unicode-0x0E00+0xA0);
      $i += 2;
    } else {
      $res .= $str[$i];
    }
  }
  return $res;
}

function tis2utf8($tis) {
   for( $i=0 ; $i< strlen($tis) ; $i++ ){
      $s = substr($tis, $i, 1);
      $val = ord($s);
      if( $val < 0x80 ){
         $utf8 .= $s;
      } elseif ( ( 0xA1 <= $val and $val <= 0xDA ) or ( 0xDF <= $val and $val <= 0xFB ) ){
         $unicode = 0x0E00 + $val - 0xA0;
         $utf8 .= chr( 0xE0 | ($unicode >> 12) );
         $utf8 .= chr( 0x80 | (($unicode >> 6) & 0x3F) );
         $utf8 .= chr( 0x80 | ($unicode & 0x3F) );
      }
   }
   return $utf8;
}

$name = utf8totis620($name);
echo strlen($name);
$name = tis2utf8($name);

ถ้ามีวิธีดีกว่านี้ แนะนำด้วยครับ

ปล. โค้ดแปลงไปมาระหว่าง tis620 กับ utf8 เอามาจากในเน็ต แต่จำไม่ได้เอามาจากเว็บไหน แต่ใช้ได้ผล

ขอบคุงมากเลยง้าบ ผมกำลังอยากได้ แปลงไปแปลงกลับพอดีเลย เจอแต่แปลงไปไม่มีแปลงกลับ

^___^ ปกติ ใช้  iconv('utf-8','tis-620',$txt)
บันทึกการเข้า

Develop site but can't develop life
ASIA
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #22 เมื่อ: 17 มีนาคม 2008, 18:48:01 »

แง่ะ ที่กระทู้ PHP ผมก็เคยมีบอก  Tongue
บันทึกการเข้า

bombman
คนรักเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 115



ดูรายละเอียด เว็บไซต์
« ตอบ #23 เมื่อ: 30 มกราคม 2009, 16:26:13 »

แจ่มมากครับ เด็ดมากๆ
บันทึกการเข้า

หน้า: 1 [2]  ทั้งหมด   ขึ้นบน
พิมพ์