Autor | Zpráva | ||
---|---|---|---|
MikeCZ Profil |
#1 · Zasláno: 29. 11. 2009, 19:39:53 · Upravil/a: MikeCZ
Zdravím.
Mám html kód elementu object a jeho dalších parametrů a pod-elementů... <object class width="600" height="338" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"> <param name="allowfullscreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7478020&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=00ADEF&fullscreen=1" /> <embed type="application/x-shockwave-flash" width="600" height="338" src="http://vimeo.com/moogaloop.swf?clip_id=7478020&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=00ADEF&fullscreen=1" allowscriptaccess="always" allowfullscreen="true"> </embed> </object> Potřebuju z toho dostat hodnotu atributu value u tagu <param name... <param name="src" value="tuto_hodnotu"... Asi by to šlo regulerními výrazy, ale bohužel je neumím :/. Děkuji za jakoukoliv pomoc. |
||
Kubiro Profil |
#2 · Zasláno: 29. 11. 2009, 20:17:19
uložíš to všechno do proměnné
$text = ' <object class width="600" height="338" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"> <param name="allowfullscreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7478020&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=00ADEF&fullscreen=1" /> <embed type="application/x-shockwave-flash" width="600" height="338" src="http://vimeo.com/moogaloop.swf?clip_id=7478020&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=00ADEF&fullscreen=1" allowscriptaccess="always" allowfullscreen="true"> </embed> </object> '; A teď z toho získáme tu value: $pole = explode("value",$text); $pole2 = explode("\"",$pole[3]); echo $pole2[1]; |
||
MikeCZ Profil |
#3 · Zasláno: 29. 11. 2009, 22:09:41
Kubiro:
> $pole = explode("value",$text); > $pole2 = explode("\"",$pole[3]); > echo $pole2[1]; Díky, ale mám stejně problém. Ten kód objectu neni vždy stejnej... těch tagů <param co maj hodnoty (value) je tam víc a jelikož to má bejt automatický a ja to předem nevidim, takže nevim jak ty kody budou vypadat, kolik tam těch value bude atd. :/ |
||
Majkl578 Profil |
#4 · Zasláno: 30. 11. 2009, 16:00:30 · Upravil/a: Majkl578
$data = '<object class width="600" height="338" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"> <param name="allowfullscreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7478020&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=00ADEF&fullscreen=1" /> <embed type="application/x-shockwave-flash" width="600" height="338" src="http://vimeo.com/moogaloop.swf?clip_id=7478020&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=00ADEF&fullscreen=1" allowscriptaccess="always" allowfullscreen="true"> </embed> </object>'; preg_match('~\<object.*>.*\<param name="src" value="(?P<link>.+)".*>.*\</object\>~iUsu', $data, $matches); echo $matches['link']; |
||
Časová prodleva: 8 dní
|
|||
MikeCZ Profil |
#5 · Zasláno: 8. 12. 2009, 16:40:19
Díky, díky. Tak teď po týdnu jsem narazil na další věc...
Někde se vyskytuje jenom: <embed type="application/x-shockwave-flash" width="600" height="338" src="http://vimeo.com/moogaloop.swf?clip_id=7478020&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=00ADEF&fullscreen=1" allowscriptaccess="always" allowfullscreen="true"> Chci to udělat tak, aby to zpracovalo všechny možnosti. Šlo by to pomocí regulerního výrazu vyparsovat tak, že i když to bude ten <param src..., nebo <embed src.. nebo to bude jeden z nich, ale místo dvojitých uvozovek " tam budou ' ... V podstatě by šlo vybrat jen SRC a jeho hodnotu, protože mezi tagy object se stejně nachází buď jen v tom param nebo embed... v obou případech je to zdroj videa. A pokud možno aby to zkusilo obě verze uvozovek mno. Pokud to není možný, tak stačí jen to src a pak si jen u toho změnim uvozovky a mělo by to jít i na ty druhé případy :). |
||
MikeCZ Profil |
#6 · Zasláno: 8. 12. 2009, 16:45:47
Uff, tak dokonce moznosti je trochu vic..
<param name="movie" value="... |
||
TomášK Profil |
#7 · Zasláno: 8. 12. 2009, 17:35:18
Použití regulárních výrazů mi nepřijde vhodné a nejsem sám (anglicky). Poohlédnul bych se po nějaké knihovně, která to umí. Sám v php nedělám, nedokážu žádnou doporučit, odkaz v článku je rozbitý, takže ani tím se nelze řídit. Ale nepochybuju, že xml/html parserů bude pro php spousta.
|
||
MikeCZ Profil |
#8 · Zasláno: 8. 12. 2009, 17:43:03
Já právě parser mám, v podstatě mám celý rss parser -> simplepie.org, ale tohle tam zrovna není :)
|
||
MikeCZ Profil |
#9 · Zasláno: 8. 12. 2009, 18:02:18 · Upravil/a: MikeCZ
No zatím nevadí, i když mě nic nenapadá..
Dále je tu regulerní výraz pro parsování IMG tagů. $pattern = "/<img[^>]+\>/i"; preg_match($pattern, $text, $matches); Mám pak takový cyklus, ale zdá se, že to vybere jen jeden a to první obrázek... mám pravdu, nebo by to mělo vyparsovat všechny? Případně jaký regulerní výraz musím zadat, aby to vyparsovalo všechny? :) EDIT: už to mám, preg_match_all :) |
||
MikeCZ Profil |
#10 · Zasláno: 8. 12. 2009, 18:46:36
Jak by vypadal regulerní výraz, kdybych chtěl vybrat i odkaz kolem obrázku? <a...<img />...</a>
|
||
Časová prodleva: 6 dní
|
|||
Majkl578 Profil |
#11 · Zasláno: 14. 12. 2009, 17:18:41
[#5][#6]MikeCZ:
Zkus použít tyto dva patterny: $patterns['object'] = '~\<object.*>.*\<param name="(?:src|movie)" value="(?P<link>.+)".*>.*\</object\>~iUsu'; $patterns['embed'] = '~\<embed.*src="(?P<link>.+)".*\>~iUsu'; foreach ($patterns as $name => $pattern) { preg_match($pattern, $data, $match); var_dump($match['link']); } [#10] MikeCZ: Ne o moc složitěji. Pokud z něj chceš odkazy: preg_match('~\<a.*href="(?P<anchor>.+)".*\>\s*\<img.*src="(?P<img>.+)".*>\s*\</a\>~iUsu', $data, $matches); var_dump($matches['anchor'], $matches['img']); Pokud jen najít: preg_match('~\<a.*href=".+".*\>\s*\<img.*src=".+".*>\s*\</a\>~iUsu', $data, $match); var_dump($match); |
||
MikeCZ Profil |
#12 · Zasláno: 14. 12. 2009, 17:24:02
Díky, ten object už jsem vyřešil trochu jinak, pěkně prasácky :-D
function returnObject($text) { $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8'); $pattern = "/\<object[^>]+\>(.+?)\<\/object\>/is"; $width = 780; $height = 500; preg_match($pattern, $text, $matches); if ( $matches[0] != "" ) { preg_match('~\<object.*>.*\<param name="src" value="(?P<link>.+)".*>.*\</object\>~iUsu', $matches[0], $link); if ($link['link'] != "") { $object = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="'.$width.'" height="'.$height.'" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"> <param name="allowFullScreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="src" value="'.$link['link'].'" /> <param name="allowfullscreen" value="true" /> <embed type="application/x-shockwave-flash" width="'.$width.'" height="'.$height.'" src="'.$link['link'].'" allowscriptaccess="always" allowfullscreen="true"> </embed> </object>'; } else { preg_match('~\<object.*>.*src="(?P<link>.+)".*\</object\>~iUsu', $matches[0], $link2); if ($link2['link'] != "") { $object = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="'.$width.'" height="'.$height.'" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"> <param name="allowFullScreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="src" value="'.$link2['link'].'" /> <param name="allowfullscreen" value="true" /> <embed type="application/x-shockwave-flash" width="'.$width.'" height="'.$height.'" src="'.$link2['link'].'" allowscriptaccess="always" allowfullscreen="true"> </embed> </object>'; } else { preg_match('~\<object.*>.*\<param name="movie" value="(?P<link>.+)".*>.*\</object\>~iUsu', $matches[0], $link3); if ($link3['link'] != "") { $object = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="'.$width.'" height="'.$height.'" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"> <param name="allowFullScreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="src" value="'.$link3['link'].'" /> <param name="allowfullscreen" value="true" /> <embed type="application/x-shockwave-flash" width="'.$width.'" height="'.$height.'" src="'.$link3['link'].'" allowscriptaccess="always" allowfullscreen="true"> </embed> </object>'; } else { preg_match("~\<object.*>.*\<param name='src' value='(?P<link>.+)'.*>.*\</object\>~iUsu", $matches[0], $link4); if ($link4['link'] != "") { $object = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="'.$width.'" height="'.$height.'" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"> <param name="allowFullScreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="src" value="'.$link4['link'].'" /> <param name="allowfullscreen" value="true" /> <embed type="application/x-shockwave-flash" width="'.$width.'" height="'.$height.'" src="'.$link4['link'].'" allowscriptaccess="always" allowfullscreen="true"> </embed> </object>'; } else { preg_match("~\<object.*>.*src='(?P<link>.+)'.*\</object\>~iUsu", $matches[0], $link5); if ($link5['link'] != "") { $object = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="'.$width.'" height="'.$height.'" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"> <param name="allowFullScreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="src" value="'.$link5['link'].'" /> <param name="allowfullscreen" value="true" /> <embed type="application/x-shockwave-flash" width="'.$width.'" height="'.$height.'" src="'.$link5['link'].'" allowscriptaccess="always" allowfullscreen="true"> </embed> </object>'; } else { preg_match("~\<object.*>.*\<param name='movie' value='(?P<link>.+)'.*>.*\</object\>~iUsu", $matches[0], $link6); if ($link6['link'] != "") { $object = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="'.$width.'" height="'.$height.'" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"> <param name="allowFullScreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="src" value="'.$link6['link'].'" /> <param name="allowfullscreen" value="true" /> <embed type="application/x-shockwave-flash" width="'.$width.'" height="'.$height.'" src="'.$link6['link'].'" allowscriptaccess="always" allowfullscreen="true"> </embed> </object>'; } } } } } } } else { $object = ""; } return $object; } |
||
Časová prodleva: 14 let
|
0