| 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: 16 let
|
|||
0