Autor Zpráva
Progro47
Profil *
Zdravím, mám problém s použítím regulárního výrazu.

Mám kód vložení youtube videa pomocí jeho embed kódu.
<iframe width="420" height="315" src="http://www.youtube.com/embed/geHLdg_VNww" frameborder="0" allowfullscreen></iframe>

Potřebuju v tomto kódu upravit hodnoty width="420" a height="315" na dejme tomu 500 a 350. S tím, že vložené hodnoty můžou být různé (tj. nemusí tam být původně 420 a 315), ale já to v konečném stavu (při uložení do databáze) potřebuji vždycky 500 a 350.

Došel jsem ke způsobu, ale nemůžu přijít jak to mám napsat, protože jednoduše nevím jak mám napsat co chci nahradit (se třemi neznámými znaky). Googl mi bohužel moc nepomohl.

$pattern[0] = "/ CO MÁM DÁT SEM? /";
        $pattern[1] = "/ CO MÁM DÁT SEM? /";
        
        $peplace[0] = "height=\"350\"";
        $replace[1] = "width=\"500\"";

        $return_txt = preg_replace($pattern, $peplace, $txt);

Díky za případnou radu :)
Joker
Profil
Progro47:
A ten kód je daný, tj. vždycky to bude: <iframe width="***" height="***" src=***, přičemž měnit se může jen to kde jsou hvězdičky?

Může v daném textu být těch <iframe> více, přičemž ty ostatní se nahrazovat nemají?
Progro47
Profil *
Ne, danej ten kód není, může tam být třeba i Vimeo, který má jiný pořadí (src, width, height), nebo jiná služba, která to bude mít zas jinak.

A ne, více iframe tam nebude. A i kdyby bylo, tak se také musí nahradit.

Jednoduše potřebuju v textu najít všechno co má znění width="XYZ" (vždy tam budou tři neznámé znaky) a změnit to na "width="500".
DarkMeni
Profil
Progro47:
více iframe tam nebude
Tak nešlo by to řešit jednodušeji přes css?
iframe, Vimeo {width: 500px !important;height: 500px !important;}/*A možná by se to obešlo i bez !important*/
Nebo ten html kód nejdřív vytvoříš a pak přepisuješ? - pak by bylo rychlejší tam ty hodnoty dosadit ještě při vytváření
Nevim jak je na tom s rychlostí DOM objekt, ale myslim si že i ten by byl rychlejší než přepisování regulárem, ale i to by šlo:
$text = '<html><head>...<iframe src="youtube.com/..." width="400" height="300">...</body></html>';
$text = preg_replace('/(<iframe[^>]*width=)("|\').*?\2/i', '$1"500"', $text);
$text = preg_replace('/(<iframe[^>]*height=)("|\').*?\2/i', '$1"350"', $text);

Jednoduše potřebuju v textu najít všechno co má znění width="XYZ"

a změnit to na "width="500".
Tak to je docela jednoduchý:
preg_replace('width=".*?"', 'width="500"', $retezec);
Ale myslim si, že si měl na mysli že všechny iframy s width, ne?
Progro47
Profil *
DarkMeni:
Tak to je docela jednoduchý:
preg_replace('width=".*?"', 'width="500"', $retezec);preg_replace('width=".*?"', 'width="500"', $retezec);Ale myslim si, že si měl na mysli že všechny iframy s width, ne?
Jo, to je přesně to co jsem potřeboval.
Teda ještě jsem to musel trošku upravit do této podoby (přidat tam ty lomítka)
preg_replace('/width=".*?"/', 'width="500"', $retezec);

Ale to je přesně ono. Prostě a jednoduše při ukládání embed kódu do databáze automaticky změnit na požadovanou velikost.
Funguje. Díky moc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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