Autor Zpráva
SteveO
Profil *
Dobrý den, je proměnná s HTML kódem $description. Ten může obsahovat jeden nebo i více tagů <img>.
Potřeboval bych nahradit obsah všech atributů src takto:

<img src="http://web1.cz/obrazek.jpg">

na

<img src="http://web2.cz/img/' . base64encode("http://web1.cz/obrazek.jpg") . '">

Snažím se o to s tímto kódem, ale nedaří se, poradí prosím někdo? Díky moc.

$description = preg_replace_callback('#<img(.*)src="(.*)"(.*)>#i', function($matches) {
    return '<img'.$matches[1].'src="img/'.base64_encode($matches[2]).'"'.$matches[3].'>';
}, $description);
Fisir
Profil
Reaguji na Stevea:
Jediný problém, který tam vidím, je, že jsi při nahrazení zapomněl na doménu:

$description = preg_replace_callback('#<img(.*)src="(.*)"(.*)>#i', function($matches) {
    return '<img'.$matches[1].'src="http://web2.cz/img/'.base64_encode($matches[2]).'"'.$matches[3].'>';
}, $description);

Ale jinak to funguje.
SteveO
Profil *
Díky, už jsem to rozchodil, problém byl v tom, že mezitím, co jsem hledal správné řešení, se mi změnila zdrojová data.

Tento kód mi funguje, ale nahrazení se provede vždy jen v poslední výskytu tagu <img> v $description. U ostatních zůstane původní src.
Ale preg_replace_callback by snad mělo fungovat na všechny výskyty hledaného řetězce, nebo ne?

$description = preg_replace_callback('/<img(.*)src="([^"]*)"(.*)>/i', function($matches) {
  return '<img'.$matches[1].'src="img/'.base64_encode($matches[2]).'"'.$matches[3].'>';
}, $description);
juriad_
Profil *
Za to muze ta prvni hvezdicka, ktera je zrava. Pozere vse od prvniho img po posledni src. Dej za tu hvezdicku otaznik nebo tecku nahrad za \s.
SteveO
Profil *
Chci být připraven i na možnost, že tag bude vypadat takto:

<img alt/style/cokoliv="xxx" src="xxx">

To by ten otazník vyřešil?
Keeehi
Profil
SteveO:
Ano, otazníku to vadit nebude.

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: