Autor Zpráva
MikeCZ
Profil
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
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
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
$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'];
MikeCZ
Profil
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
Uff, tak dokonce moznosti je trochu vic..

<param name="movie" value="...
TomášK
Profil
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
Já právě parser mám, v podstatě mám celý rss parser -> simplepie.org, ale tohle tam zrovna není :)
MikeCZ
Profil
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
Jak by vypadal regulerní výraz, kdybych chtěl vybrat i odkaz kolem obrázku? <a...<img />...</a>
Majkl578
Profil
[#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
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;
		}

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: