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

ตอบกระทู้

รูปแสดงอารมณ์
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
รูปแสดงอารมณ์อื่นๆ

BBCode เปิด
[img] เปิด
[url] เปิด
[Smile icon] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: การค้นหา URL ของข้อมูลที่น้ำมาใส่ใน tag iframe ใน phpbb

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

โดย Ittichai_chupol » 23/07/2019 11:25 am

- สำหรับผู้ที่กำลังศึกษาพัฒนา เว็บบอร์ด 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

ข้างบน