การค้นหา URL ของข้อมูลที่น้ำมาใส่ใน tag iframe ใน phpbb

PHP Knowledge เป็น บอร์ดรวามความรู้ php เน้นบทความ แนวทางการเขียนโปรแกรม บันทึกกันลืม เพื่อให้สมาชิกได้เขียนความรู้ที่ตัวเองมีให้สมาชิกท่านอื่นๆ ได้ เข้ามาอ่าน และ ไว้อ่านเองกันลืมด้วย

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

ภาพประจำตัวสมาชิก
Ittichai_chupol
PHP VIP Members
PHP VIP Members
โพสต์: 5410
ลงทะเบียนเมื่อ: 19/09/2018 10:33 am

การค้นหา URL ของข้อมูลที่น้ำมาใส่ใน tag iframe ใน phpbb

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

- สำหรับผู้ที่กำลังศึกษาพัฒนา เว็บบอร์ด phpbb นัน คงไม่อาจจะหนีพ้นการใช้ tag ต่างๆ ของ html เข้ามาช่วยสำหรับการแสดงผล ของ phpbb ที่พัฒนาขึ้นมา ซึ่ง ถึงแม้ว่า เราจะใช้ tag ส่วนใหญ่ไม่กี่ tag ก็ตาม และมีมี tag อีกมากมายที่ไม่ได้นำมาใส่โดยตรงก็ตาม แต่ก็ไม่ใช้ว่าเราจะไม่ต้องใช้ tag เหล่านั้น เพราะบางทีเราจะะไปพบว่า เรามีการใช้ tag เหล่านี้มาจาก ผลลัพธ์ของการใช้งาน bbcode ก็ได้ เช่น การการใช้งาน ะag iframe เพื่อใช้ในการสร้าง bbcode เพื่อแสดง วิดีโอในโพสต์
- ซึ่งในบางครั่ง การใช่ bbcode เพื่อเขียนโพสต์ นั้น อาจจะมีการเก็บลงในฐานข้อมูลอีกแบบ แต่พอนำมาแสดงก็ได้ผลลัพธ์อีก แบบ ที่มีส่วนต่างจากข้อมูลที่เราเก็บยลงในฐานข้อมูล เช่น การใช้งาน bbcode ที่ผมสร้างขึ้นมาเอง โดยถ้าหากเก็บลงในฐานข้อมูลนั้น จะมีโดด ดังนี้

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

<br/>
<YOUTUBE content="qlUen8xpmTY"><s>[youtube]</s>qlUen8xpmTY<e>[/youtube]</e></YOUTUBE><br/>
<br/>

แต่หากนำไปแสดงใน html ผลอีกแบบ คือ

Selection_999(1805).png
แต่เมื่อลองทำการ View source แล้วก็จะเห็นว่าโคดที่แสดงวิด๊โอจะได้ ดังนี้

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

<br>
<iframe style="width:90%;height:315px" src="https://www.youtube.com/embed/qlUen8xpmTY" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe><br>
<br>
ซึ่งจะเห็นว่า โคดที่เก็บลงในฐานข้อมูลนั้น มีความต่างกับ ส่วนที่แสดงอย่าง และเราจะไม่รู้เลยว่า URL ที่นำมาโพสต์ URL อะไรในฐานข้อมูล ซึ่งถ่าหากอยากจะ URL มาใช้เราจะต้อง ทำการ View source ออกมา

แต่ทั้งนี้เราก็มีวิธีการสำหรับการที่จะดึง URL ออกมาแสดงโดยเฉาะได้ จาก tag iframe โดยการใช้ preg_match_all() นั้นเอง

ขั้นตอนใช้งาน

1.เราจะต้องดึง ข้อมูลโพสนั้นออกมาจาก ตารางโพสต์ก่อนดังนี้

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

       $sql_ary = array(
                'SELECT' => '*',
                'FROM' => array(
                    POSTS_TABLE => 'p',
                ),
                'LEFT_JOIN' => array(
                    array(
                        'FROM' => array(USERS_TABLE => 'u'),
                        'ON' => 'p.poster_id = u.user_id',
                    ),
                    array(
                        'FROM' => array(TOPICS_TABLE => 't'),
                        'ON' => 'p.topic_id = t.topic_id',
                    )
                ),
                'WHERE' => 'post_id = ' . $post_id,
            );
            $sql = $this->db->sql_build_query('SELECT', $sql_ary);
            $result = $this->db->sql_query($sql);
            $row = $this->db->sql_fetchrow($result);
2.จากนั้นทำการแปลง bbcode จาก เนื้อหาข้อโพสต์

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

     $parse_flags = ($row['bbcode_bitfield'] ? OPTION_FLAG_BBCODE : 0) | OPTION_FLAG_SMILIES;
            $message = generate_text_for_display($text, $row['bbcode_uid'], $row['bbcode_bitfield'], $parse_flags, true);
3.ทำการค้นหา tag iframe ด้วย preg_match_all() ดังนี้

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

    preg_match_all('/<iframe.*src=\"(.*)" frameborder(.*)><\/iframe>/', $message, $output_array);
4.จากนั้น สั่ง print_r เพื่อตรวจสอบ URL

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

print_r($output_array['1']);
5.ผลลัพธ์ที่ได้

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

https://www.youtube.com/embed/qlUen8xpmTY
ขอให้วันนี้เป็นวันที่ดี
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

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

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 67