เข้าชม :
1613
|
|
|
[ ความเห็นที่ 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. else16. { 17. echo $Topic; 18. } 19. //Examples 2 20.?>ผลลัพธ์
[แจก] ฟังก์ชั่น str-split(), strlen(), substr() สำหรับต...
HTML5 Articles, Examples, Tricks and Tips ความรู้เกี่ย... ลองนำไปใช้ดูนะคับ ใครนำไปดัดแปลงอะไรก็แล้วแต่สะดวกคับ ถ้าได้อะไรใหม่ๆ ก็มาแบ่งปันกันด้วยนะครับ เพื่อสังคมแห่งการแบ่งปัน(น้ำใจ) |
|




