Farklı video gömer kaynaklardan ayıklamak için Regexp

3 Cevap php

Benim SMF forum video mesajlarını içerir ve Wordpress ana sayfada göstermek için onları ayıklamak istiyorum. Benim şu anki sıradanifade (sayesinde SO!) Ben AutoEmbed kullanarak embed videoları, url ayıklar.

Her şey bir sonrası bu gibi görünüyor kadar çalışır:

<embed height="600" width="600" allowscriptaccess="never" quality="high" loop="true" play="true" src="http://mmavlog.net/embed/player.swf?file=http://video.ufc.tv/CSG/UFC113/20100507_ufc113_weigh_in_400k.flv" type="application/x-shockwave-flash">

İşte benim şimdiki sıradanifade olduğunu:

$regexp = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i";

Mesajlar <embed> ya da içerebilir beri <object> I "http" ile url arıyor hatalı olabileceğini biliyoruz. Nasıl için <embed> ve "data =" için "src =" aramak için regexpi kullanabilirsiniz <object>?

3 Cevap

Eğer düğümü ayıklamak için (HTML sağlanan iyi biçimlendirilmiş) ve oldukça regex güvenmek yerine öznitelik verileri XML olarak HTML ayrıştırma düşündünüz mü?

How not to do it even though it works:

$str = <<<HTML
<object width="550" height="400">
    <param name="movie" value="somefilename.swf">
    <embed src="somefilename.swf" width="550" height="400">
    </embed>
</object>
HTML;

$matches = array();
if (preg_match_all('/(src|value)="([^"]+)"/', $str, $matches)) {
   print_r($matches);
}
// Array
// (
//     [0] => Array
//         (
//             [0] => value="somefilename.swf"
//             [1] => src="somefilename.swf"
//         )
// 
//     [1] => Array
//         (
//             [0] => value
//             [1] => src
//         )
// 
//     [2] => Array
//         (
//             [0] => somefilename.swf
//             [1] => somefilename.swf
//         )
// 
// )

How to really do it:

Bu simplehtmldom ile HTML ayrıştırmak için nasıl bir örnek olduğunu ve bu değil kesinlikle simplehtmldom, diğer herhangi bir HTML çözümleyici kullanabilirsiniz olsa, (düzenli ifadeler kullanarak yerine ne yapması gerektiğini en Bunların) benzer API var.

<?php
include('simple_html_dom.php');

$str = <<<HTML
<object width="550" height="400">
    <param name="movie" value="somefilename.swf">
    <embed src="somefilename.swf" width="550" height="400">
    </embed>
</object>
HTML;

$html = str_get_html($str);
$embed = $html->find('embed', 0);
echo $embed->src;
// prints somefilename.swf

$object = $html->find('object param', 0);
echo $object->value;
// prints somefilename.swf
?>

Regexpi çözmek için:

/(?:src|data)="([^"]+)"/

Bir ipucu:. embed ve object ile video gömme - önlemek, böylece 2002 (hayır eklentileri gerektirir) video etiketi çok daha basit ve daha güçlü kullanmayı deneyin.