ยินดีต้อนรับ กรุณา สมัครสมาชิก หรือเข้าสู่ระบบ

Home » webboard » PHP
เข้าชม : 1613

ฟังก์ชั่น ที่ สมาชิกจาก thaicreate แจก

โพสต์เมื่อ: วันอังคาร 8 พฤษภาคม 2555  13:46 น.

[ ความเห็นที่ 1]
RE : ฟังก์ชั่น ที่ สมาชิกจาก thaicreate แจก
โพสต์เมื่อ: วันอังคาร 8 พฤษภาคม 2555  22:09 น.
สาเหตุที่ทำ
1. เนื่องจากผมเจอปัญหาต้องการตัดคำแล้วเติม ... ต่อท้าย สำหรับทำหัวข้อข่าวหรือกระทู้ที่มีตัวอักษรยาวเกินกำหนด
แต่ปัญหาจะเกิดสำหรับภาษาไทยเพราะฟังก์ชั่นที่มีอยู่ของ PHP นั้นจะนับสระและวรรณยุกต์ด้านบนและล่างของข้อความ ทำให้ภาษาไทยสั้นกว่าภาษาอังกฤษ

2. ผมหาฟังก์ชั่นจากที่ต่างๆ แล้วที่เขาทำแจกไว้ แต่ก็ยังไม่ตรงกับความต้องการของผม เลยนำฟังก์ชั่นที่เขาแจกมาดัดแปลงใหม่และคิดว่าน่าจะมีหลายท่านที่ประสบปัญหานี้อยู่

สิ่งที่ได้
เนื่องสิ่งที่ผมต้องการ มันต้องใช้ฟังก์ชั่น ทำให้ได้ฟังก์ชั่น มา 3 ตัว สามารถนำไปใช้งานอื่นๆ เพิ่มเติมได้อีก


ฟังก์ชั่นที่แจก

1. getMBStrSplit
ฟังก์ชั่นสำหรับแบ่งข้อความเป็น Array (ปกติใช้ str_split() แต่สำหรับภาษาไทยแบบ UTF-8 จะมีปัญหาการแบ่ง)

Function Code
01.// Convert a string to an array with multibyte string
02.function getMBStrSplit($string, $split_length = 1){
03.    mb_internal_encoding('UTF-8');
04.    mb_regex_encoding('UTF-8'); 
05.      
06.    $split_length = ($split_length <= 0) ? 1 : $split_length;
07.    $mb_strlen = mb_strlen($string, 'utf-8');
08.    $array = array();
09.    $i = 0; 
10.      
11.    while($i < $mb_strlen)
12.    {
13.        $array[] = mb_substr($string, $i, $split_length);
14.        $i = $i+$split_length;
15.    }
16.      
17.    return $array;
18.}


Description
array getMBStrSplit ( string $string [, int $split_length = 1 ] )


Parameters
string
ข้อความที่ต้องการนำมาแบ่ง

split_length
จำนวนความยาวของตัวอักษรที่จะแบ่ง (ค่าปริยายคือ 1)


Examples
ตัวอย่างการใช้ getMBStrSplit()
01.<?php
02.  
03.$str = "สวัสดีชาวโลก";
04.  
05.$arr1 = getMBStrSplit($str);
06.$arr2 = getMBStrSplit($str, 3);
07.  
08.print_r($arr1);
09.print_r($arr2);
10.  
11.?>


ผลลัพธ์
Array
(
[0] => ส
[1] => ว
[2] => ั
[3] => ส
[4] => ด
[5] => ี
[6] => ช
[7] => า
[8] => ว
[9] => โ
[10] => ล
[11] => ก
)

Array
(
[0] => สวั
[1] => สดี
[2] => ชาว
[3] => โลก
)








2. getStrLenTH
ฟังก์ชั่นสำหรับหาความยาวของข้อความสำหรับภาษาไทยแบบ UTF-8 โดยจะไม่นับวรรณยุกต์หรือสระด้านบนกับด้านล่างข้อความ
(ปกติใช้ strlen() แต่สำหรับภาษาไทยแบบ UTF-8 จะมีปัญหาการนับจำนวนที่เกิน และนับวรรณยุกต์หรือสระด้วย)

Function Code
01.// Get string length for Character Thai
02.function getStrLenTH($string)
03.{
04.    $array = getMBStrSplit($string);
05.    $count = 0;
06.      
07.    foreach($array as $value)
08.    {
09.        $ascii = ord(iconv("UTF-8", "TIS-620", $value ));
10.          
11.        if( !( $ascii == 209 ||  ($ascii >= 212 && $ascii <= 218 ) || ($ascii >= 231 && $ascii <= 238 )) )
12.        {
13.            $count += 1;
14.        }
15.    }
16.    return $count;
17.}


Description
int getStrLenTH ( string $string )


Parameters
string
ข้อความที่ต้องการนับ


Examples
ตัวอย่างการใช้ getStrLenTH()
1.<?php
2.$str = 'สวัสดีชาวโลก';
3.echo getStrLenTH($str); // 10
4.  
5.$str = 'เรารักประเทศไทย';
6.echo getStrLenTH($str); // 14
7.?>








3. getSubStrTH
ฟังก์ชั่นสำหรับตัดตำแหน่งตัวอักษรที่ต้องการสำหรับภาษาไทยแบบ UTF-8 โดยจะนับตำแหน่งเฉพาะพยัญชนะ สระ อักขระพิเศษที่อยู่ในบรรทัด ไม่นับสระหรือวรรณยุกต์ ที่อยู่ด้านบนหรือล่างบรรทัด
(ปกติใช้ strlen() แต่สำหรับภาษาไทยแบบนับจำนวนที่เกิน และนับสระหรือวรรณยุกต์ ที่อยู่ด้านบนหรือล่างบรรทัดด้วย ทำให้ข้อความสั้นกว่าข้อความที่เป็นภาษาอังกฤษ)

Function Code
01.// Get part of string for Character Thai
02.function getSubStrTH($string, $start, $length)
03.{           
04.    $length = ($length+$start)-1;
05.    $array = getMBStrSplit($string);
06.    $count = 0;
07.    $return = "";
08.          
09.    for($i=$start; $i < count($array); $i++)
10.    {
11.        $ascii = ord(iconv("UTF-8", "TIS-620", $array[$i] ));
12.          
13.        if( $ascii == 209 ||  ($ascii >= 212 && $ascii <= 218 ) || ($ascii >= 231 && $ascii <= 238 ) )
14.        {
15.            //$start++;
16.            $length++;
17.        }
18.          
19.        if( $i >= $start )
20.        {
21.            $return .= $array[$i];
22.        }
23.          
24.        if( $i >= $length )
25.            break;
26.        }
27.      
28.    return $return;
29.}


Description
string getSubStrTH ( string $string , int $start [, int $length ] )


Parameters
string
ข้อความที่ต้องการนำมาตัด

start
ตำแหน่งเริ่มต้นที่จะเก็บข้อความ โดนต่ำแหน่งแรกคือ 0 (ยังไม่สามารถทำให้ใช้คำสั่งติดลบได้นะครับ เช่น -10 แบบฟังก์ฟัน substr() )

length
ความยาวของตัวอักษรที่จะเก็บ นับจากต่ำแหน่งเริ่มต้น ( $start )


Examples
ตัวอย่างการใช้ getStrLenTH()
1.<?php
2.$str = 'ประเทศไทยน่าอยู่';
3.echo getSubStrTH($str, 0, 9); // ประเทศไทย
4.  
5.$str = 'เรารักประเทศไทย';
6.echo getSubStrTH($str, 6, 40); // ประเทศไทย
7.?>








ตัวอย่างสำหรับใช้ในการตัดคำแสดงกระทู้หรือข่าวสาร ไม่ให้เกินจำนวนตัวอักษรที่เรากำหนด
Examples Topic Worl Wrap (ในตัวอย่างนี้กำหนดห้ามเกิน 50 ตัวอักษร

01.<?php
02.    //Examples 1
03.    $Topic = "[แจก] ฟังก์ชั่น str-split(), strlen(), substr() สำหรับตัวอักษรแบบ UTF-8 และ ภาษาไทย (ไม่นับวรรณยุกต์และสระบนล่าง)";
04.    echo (getStrLenTH($Topic) > 50) ? getSubStrTH($Topic, 0, 50). "..." : $Track;
05.    //Examples 1
06.      
07.    echo "<br />";
08.      
09.    //Examples 2
10.    $Topic = "HTML5 Articles, Examples, Tricks and Tips ความรู้เกี่ยวกับเทรนใหม่ HTML 5...ห้า...ห้า...ห้า ^___^ ";
11.    if( getStrLenTH($Topic) > 50)
12.    {
13.        echo getSubStrTH($Topic, 0, 50). "...";
14.    }
15.    else
16.    {
17.        echo $Topic;
18.    }
19.    //Examples 2
20.?>


ผลลัพธ์
[แจก] ฟังก์ชั่น str-split(), strlen(), substr() สำหรับต...
HTML5 Articles, Examples, Tricks and Tips ความรู้เกี่ย...






ลองนำไปใช้ดูนะคับ ใครนำไปดัดแปลงอะไรก็แล้วแต่สะดวกคับ
ถ้าได้อะไรใหม่ๆ ก็มาแบ่งปันกันด้วยนะครับ เพื่อสังคมแห่งการแบ่งปัน(น้ำใจ)






คุณต้องสมัครสมาชิก ถึงจะโพสกระทู้ได้

ปิดรับสมัครสมาชิกแล้ว