สอบถามเรื่องการตัด tags ของ BBCode

สำหรับผู้ที่ เริ่มต้น Programming - PHP มีอะไร แนะนำ หรือข้อสงสัยต้องบอร์ด นี้ คนที่มีความรู้ แบ่งปันคนอื่นบ้างนะ ปัญหาการเขียนโปรแกรม แบบ OOP Session Cookies php network

Moderator: mindphp, ผู้ดูแลกระดาน

flook
PHP VIP Members
PHP VIP Members
โพสต์: 3751
ลงทะเบียนเมื่อ: 06/06/2022 9:43 am

สอบถามเรื่องการตัด tags ของ BBCode

โพสต์ที่ยังไม่ได้อ่าน โดย flook »

ผมใช้ function นี้ในการตัดข้อมูล tags BBcode ที่จะนำมาแสดงข้อง phpBB โดย
ข้อมูลที่เอามาตัดจะได้จาก core.viewtopic_modify_post_row

โค้ด: เลือกทั้งหมด

[b]Solved asd [2022-09][00172]Solved asd [2022-09][00172]Solved asd [2022-09][00172]Solved asd [2022-09][00172]Solved asd [2022-09][00172][/b]
  • function

    โค้ด: เลือกทั้งหมด

      function stripBBCode($text_to_search)
        {
            $pattern = '|[[\/\!]*?[^\[\]]*?]|si';
            $replace = '';
            return preg_replace($pattern, $replace, $text_to_search);
        }
    
จากข้อมูลที่แสดง
Programming - PHP-1.png
Programming - PHP-1.png (2.27 KiB) Viewed 655 times
พอตัดข้อมูลเสร็จ
Programming - PHP-1.png
Programming - PHP-1.png (2.08 KiB) Viewed 655 times
มีวิธีแก้ไขไหมครับ
flook
PHP VIP Members
PHP VIP Members
โพสต์: 3751
ลงทะเบียนเมื่อ: 06/06/2022 9:43 am

Re: สอบถามเรื่องการตัด tags ของ BBCode

โพสต์ที่ยังไม่ได้อ่าน โดย flook »

อยากให้ตัวแค่ BBcode ครับ ไม่อยากตัดในส่วนของ

โค้ด: เลือกทั้งหมด

[2022-09][00172]
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41239
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: สอบถามเรื่องการตัด tags ของ BBCode

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

ลอง

โค้ด: เลือกทั้งหมด

print_r($event['row'])
เช็คค่า ดูอาจมีค่าใน post ที่ต้องการแสดงแบบมีการแปลง BBCode ไว้แล้ว
แค่ใช้ trim html ออกก็ได้
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
flook
PHP VIP Members
PHP VIP Members
โพสต์: 3751
ลงทะเบียนเมื่อ: 06/06/2022 9:43 am

Re: สอบถามเรื่องการตัด tags ของ BBCode

โพสต์ที่ยังไม่ได้อ่าน โดย flook »

mindphp เขียน: 29/09/2022 7:28 pm ลอง

โค้ด: เลือกทั้งหมด

print_r($event['row'])
เช็คค่า ดูอาจมีค่าใน post ที่ต้องการแสดงแบบมีการแปลง BBCode ไว้แล้ว
แค่ใช้ trim html ออกก็ได้
ตัวอย่างข้อมูลที่ได้จาก $event['row']

โค้ด: เลือกทั้งหมด

array(30) {
  ["hide_post"]=>
  bool(false)
  ["post_id"]=>
  string(3) "144"
  ["post_time"]=>
  string(10) "1664504112"
  ["user_id"]=>
  string(1) "2"
  ["username"]=>
  string(6) "admin1"
  ["user_colour"]=>
  string(6) "AA0000"
  ["topic_id"]=>
  string(2) "75"
  ["forum_id"]=>
  string(1) "2"
  ["post_subject"]=>
  string(27) "Solved asd [2022-09][00172]"
  ["post_edit_count"]=>
  string(1) "0"
  ["post_edit_time"]=>
  string(1) "0"
  ["post_edit_reason"]=>
  string(0) ""
  ["post_edit_user"]=>
  string(1) "0"
  ["post_edit_locked"]=>
  string(1) "0"
  ["post_delete_time"]=>
  string(1) "0"
  ["post_delete_reason"]=>
  string(0) ""
  ["post_delete_user"]=>
  string(1) "0"
  ["icon_id"]=>
  int(0)
  ["post_attachment"]=>
  string(1) "0"
  ["post_visibility"]=>
  string(1) "1"
  ["post_reported"]=>
  string(1) "0"
  ["post_username"]=>
  string(0) ""
  ["post_text"]=>
  string(229) "[url][b]Solved asd [2022-09][00172] Solved asd [2022-09][00172][/b][/url]"
  ["bbcode_uid"]=>
  string(7) "1iun4h4"
  ["bbcode_bitfield"]=>
  string(0) ""
  ["enable_smilies"]=>
  string(1) "1"
  ["enable_sig"]=>
  string(1) "1"
  ["friend"]=>
  NULL
  ["foe"]=>
  NULL
  ["count_like"]=>
  int(0)
}

ในส่วนนี้ผมต้อง ใช้ trim ตัดออกเป็นตัวๆไปหรอครับ

โค้ด: เลือกทั้งหมด

 echo trim("[url][b]Solved asd [2022-09][00172] Solved asd [2022-09][00172][/b][/url]","[b]");
ข้อมูล

โค้ด: เลือกทั้งหมด

  ["post_text"]=>
  string(229) "[url][b]Solved asd [2022-09][00172] Solved asd [2022-09][00172][/b][/url]"
  
flook
PHP VIP Members
PHP VIP Members
โพสต์: 3751
ลงทะเบียนเมื่อ: 06/06/2022 9:43 am

Re: สอบถามเรื่องการตัด tags ของ BBCode

โพสต์ที่ยังไม่ได้อ่าน โดย flook »

ถ้าผมเขียนแบบนี้ได้ไหมครับ
ฟั่งชั่นเดิม ที่ตัดทั้งหมด ถ้าข้อความอยู่ใน []

โค้ด: เลือกทั้งหมด

  function stripBBCode($text_to_search)
    {
        $pattern = '|[[\/\!]*?[^\[\]]*?]|si';
        $replace = '';
        return preg_replace($pattern, $replace, $text_to_search);
    }
ฟั่งชั่นใหม่ เป็นการ ฟิกว่ามี tags ของ BBcode อะไรบ้าง แล้วตัดออก

โค้ด: เลือกทั้งหมด

 function stripBBCode2($text_to_search)
    {
        $pattern = array(
            '|[[]b[]]|',
            '|[[]/b[]]|',
            '|[[]i[]]|',
            '|[[]/i[]]|',
            '|[[]url.*?[]]|',
            '|[[]/url[]]|',
            '|[[]u[]]|',
            '|[[]/u[]]|',
            '|[[]quote[]]|',
            '|[[]/quote[]]|',
            '|[[]list.*?[]]|',
            '|[[]/list[]]|',
            '|[[][*][]]|',
            '|[[]img.*?[]]|',
            '|[[]/img[]]|',
            '|[[]flash.*?[]]|',
            '|[[]/flash[]]|',
            '|[[]code[]]|',
            '|[[]/code[]]|',
            '|[[]color.*?[]]|',
            '|[[]/color[]]|',
            '|[[]size.*?[]]|',
            '|[[]/size[]]|',
            '|[[]attachment.*?[]]|',
            '|[[]/attachment[]]|',

        );
        $replace = '';
        return preg_replace($pattern, $replace, $text_to_search) ;
    }

ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41239
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: สอบถามเรื่องการตัด tags ของ BBCode

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

phpBB มีฟังก์ชั่นแปลง BBCode เป็น HTML แล้ว
เมื่อได้ HTML แล้ว
ใช้ฟังก์ชั่น strip_tags ตัด tags html ออกไป
https://www.mindphp.com/คู่มือ/63-ฟังก์ ... _tags.html
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
flook
PHP VIP Members
PHP VIP Members
โพสต์: 3751
ลงทะเบียนเมื่อ: 06/06/2022 9:43 am

Re: สอบถามเรื่องการตัด tags ของ BBCode

โพสต์ที่ยังไม่ได้อ่าน โดย flook »

mindphp เขียน: 30/09/2022 1:53 pm phpBB มีฟังก์ชั่นแปลง BBCode เป็น HTML แล้ว
เมื่อได้ HTML แล้ว
ใช้ฟังก์ชั่น strip_tags ตัด tags html ออกไป
https://www.mindphp.com/คู่มือ/63-ฟังก์ ... _tags.html
มีตัวอย่างของฟั่งชั่นนี้ไหมครับ แปลง BBCode ให้เป็น HTML
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41239
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: สอบถามเรื่องการตัด tags ของ BBCode

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

การ parsing ข้อความ
https://area51.phpbb.com/docs/dev/maste ... ht=parsing
generate_text_for_display()
ตัวอย่างการใช้งาน อยู่ในไฟล์ พวก viewtopic.php หรือ พวกเกี่ยวกับ pm หน้า ucp.php mode view pm
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ภาพประจำตัวสมาชิก
eange08
PHP VIP Members
PHP VIP Members
โพสต์: 16191
ลงทะเบียนเมื่อ: 22/12/2020 10:09 am

Re: สอบถามเรื่องการตัด tags ของ BBCode

โพสต์ที่ยังไม่ได้อ่าน โดย eange08 »

ไปเจออีก function หนึ่งของ phpBB มาค่ะ ตัด bbcode ออกได้ เป็น

โค้ด: เลือกทั้งหมด

strip_bbcode(&$text, $uid = '')
//$text = ข้อความที่เป็น bbcode
//$uid = ส่ง bbcode_uid ของ post นั้นจะมีใน table phpbb_posts
ใน phpBB3.3 จะไม่ return ค่าออกมา เอาในฟังกชั่นมาใช้เองได้ค่ะ

โค้ด: เลือกทั้งหมด

public function hiddenBBCode($text, $uid) {
        global  $phpbb_root_path,$phpbb_container;


	if (preg_match('#^<[rt][ >]#', $text))
	{
		$text = utf8_htmlspecialchars($phpbb_container->get('text_formatter.utils')->clean_formatting($text));
	}
	else
	{
		if (!$uid)
		{
			$uid = '[0-9a-z]{5,}';
		}

		$text = preg_replace("#\[\/?[a-z0-9\*\+\-]+(?:=(?:&quot;.*&quot;|[^\]]*))?(?::[a-z])?(\:$uid)\]#", ' ', $text);

		$match = get_preg_expression('bbcode_htm');
		$replace = array('\1', '\1', '\2', '\1', '', '');

		$text = preg_replace($match, $replace, $text);
	}

		
	
        return $text;
    }
ก่อนใช้
Selection_999(152).png
Selection_999(152).png (22.65 KiB) Viewed 435 times
หลังใช้
Selection_999(153).png
Selection_999(153).png (19.5 KiB) Viewed 435 times
flook
PHP VIP Members
PHP VIP Members
โพสต์: 3751
ลงทะเบียนเมื่อ: 06/06/2022 9:43 am

Re: สอบถามเรื่องการตัด tags ของ BBCode

โพสต์ที่ยังไม่ได้อ่าน โดย flook »

mindphp เขียน: 30/09/2022 1:53 pm phpBB มีฟังก์ชั่นแปลง BBCode เป็น HTML แล้ว
เมื่อได้ HTML แล้ว
ใช้ฟังก์ชั่น strip_tags ตัด tags html ออกไป
https://www.mindphp.com/คู่มือ/63-ฟังก์ ... _tags.html
จากที่ได้ทำตามดูครับ

ส่วนโค้ด

โค้ด: เลือกทั้งหมด

  $text = strip_tags(generate_text_for_display($row['post_text'], $row['bbcode_uid'], $row['bbcode_bitfield'], $row['bbcode_options']));
ส่วนข้อมูลก่อนตัด tags หรือข้อมูลทดสอบ

โค้ด: เลือกทั้งหมด

[b]Solved asd [2022-09][00172]Solved asd [2022-09][00172][/b]

[attachment=0]img_avatar2.png[/attachment]

[code]
[attachment=0]img_avatar3.png[/attachment]
[code]// ถ้าไปเป็น test จริงต้องใส่ / ด้วย

[attachment=0]img_avatar3.png[/attachment]

ผลลัพ

โค้ด: เลือกทั้งหมด

Solved asd [2022-09][00172]Solved asd [2022-09][00172] img_avatar2.png โค้ด: เลือกทั้งหมด[attachment=0]img_avatar3.png[/attachment] img_avatar3.png
ยังมีบางส่วนตัดออกไม่หมด
คือส่วนนี้เวลาเปิด tags code
Programming - PHP-1.png
Programming - PHP-1.png (2.84 KiB) Viewed 356 times
วิธีนี้ได้ข้อมูลไม่ตามความต้องการ
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: Bing [Bot], Google Adsense [Bot] และบุคลทั่วไป 97