แก้ไขการตัดข้อความด้วย substrใน php แล้วมีรูปสี่เหลี่ยม

เขียนเมื่อ 14 ปีก่อน โดย Ninenik Narkdee
php ตัดข้อความ

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ php ตัดข้อความ

ดูแล้ว 12,243 ครั้ง


ใช้ตัดข้อความจากฐานข้อมูลที่ต้องการแสดงบางส่วนเช่น 30 ตัวอักษร กรณีบางครั้งภาษาไทยที่ตัดจากฐานข้อมูล จะแสดงเป็นรูปสี่เหลี่ยม ใช้ฟังก์ชันนี่แทน substr ใน php แก้ปัญหาที่เกิดได้

แบบที่ 1

<?php
function substr_utf8( $str, $start_p , $len_p){
 return preg_replace( '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$start_p.'}'.
  '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len_p.'}).*#s',
  '$1' , $str );
};
// การใช้งาน
// $start_p คือตำแหน่งเริ่มต้นตัดข้อความ
// $len_p คือจำนวนตัวอักษรที่ต้องการแสดง
// $data="ข้อความทดสอบ ข้อความทดสอบ ข้อความทดสอบ ข้อความทดสอบข้อความทดสอบ ";
// echo substr_utf8($data,0,30);
?>

 

แบบที่ 2

<?php 
function utf8_substr($str,$start_p,$len_p) 
{ 
   preg_match_all("/./u", $str, $ar); 

   if(func_num_args() >= 3) { 
       $end = func_get_arg(2); 
       return join("",array_slice($ar[0],$start_p,$len_p)); 
   } else { 
       return join("",array_slice($ar[0],$start_p)); 
   } 
} 
// การใช้งาน
// $start_p คือตำแหน่งเริ่มต้นตัดข้อความ
// $len_p คือจำนวนตัวอักษรที่ต้องการแสดง
// $data="ข้อความทดสอบ ข้อความทดสอบ ข้อความทดสอบ ข้อความทดสอบข้อความทดสอบ ";
// echo utf8_substr($data,0,30);
?> 

 



   เพิ่มเติมเนื้อหา ครั้งที่ 1 วันที่ 23-10-2017


แบบที่ 3 

ใช้ฟังก์ชั่น mb_substr()

ตัวอย่าง

<?php
$text = "วันนี้ทดสอบบบ";
echo mb_substr($text,0,-2);
// จะได้ผลลัพธ์เป็น "วันนี้ทดสอบ"
?>


   เพิ่มเติมเนื้อหา ครั้งที่ 2 วันที่ 30-01-2020


แบบที่ 4
 
ใช้ฟังก์ชั่น mb_strimwidth() ซึ่งนอกจากจะตัดข้อความแล้ว เรายังสามารถเพิ่มส่วนของข้อความ
ที่ต้องการแสดงแทนข้อความที่ตัดออกไปได้ เช่น ใช่ ... ต่อท้ายข้อความ เป็นต้น

<?php

$msg = "
ข้อความทดสอบขนาด ยาวกว่าปกติ ข้อความทดสอบขนาด ยาวกว่าปกติ ข้อความทดสอบขนาด ยาวกว่าปกติ 
ข้อความทดสอบขนาด ยาวกว่าปกติ ข้อความทดสอบขนาด ยาวกว่าปกติ 
";
echo mb_strimwidth($msg, 0, 50);
// ข้อความทดสอบขนาด ยาวกว่าปกติ ข้อความทดสอบขนาด ยา

echo mb_strimwidth($msg, 0, 50, '...');
// ข้อความทดสอบขนาด ยาวกว่าปกติ ข้อความทดสอบขนาด...

echo mb_strimwidth($msg, 0, 50, '...', 'UTF-8'); // ป้องกันกรณี ภาษาไทย
// ข้อความทดสอบขนาด ยาวกว่าปกติ ข้อความทดสอบขนาด...

$msg2 = "<string>
ข้อความทดสอบขนาด ยาวกว่าปกติ ข้อความทดสอบขนาด ยาวกว่าปกติ ข้อความทดสอบขนาด ยาวกว่าปกติ 
ข้อความทดสอบขนาด ยาวกว่าปกติ ข้อความทดสอบขนาด ยาวกว่าปกติ 
</strong>";
echo mb_strimwidth(strip_tags($msg2), 0, 30, '...', 'UTF-8'); 
// ป้องกันกรณี ภาษาไทย และลบ tag html ที่ไม่ต้องการ
// ข้อความทดสอบขนาด ยาวกว่าป...

?>


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ







เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ