Strona 1 z 1

[php] preg_replace w akcji - szukam pomocy

: wt lut 02, 2010 5:06 am
autor: Adonistrator
Witam !

Moja zabawa z PHP napotkała wielki mur... Nie radzę sobie z preg_replace...

Chcialbym zamienić następujący przykładowy kod:

Kod: Zaznacz cały

<img class="miniaturka_prettyPhoto" style="float: left;" src="uploads/images/xx/Obraz 001.jpg" alt="" width="780" height="585" />
na:

Kod: Zaznacz cały

<a rel="prettyPhoto" href="uploads/images/xx/Obraz 001.jpg"><img class="prettyPhoto" style="float: left;" src="lib/thumbs.php?img=%2Fxx%2FObraz+001.jpg" /></a>
tzn:
- z img usuwamy tylko width i height
- dodajemy znacznik <a z rel="prettyPhoto" (niezmiennie)
- zamieniamy src znacznika img
- usuwamy uploads/images z img (niekoniecznie)
- zmienną ?img parsujemy za pomocą urlencode(...)
Wiemy też, że ten kod może występować w dokumencie kilka razy.

Najgorsze jest to, że wiem co chcę osiągnąć ale nie mam pojęcia jak... siedzę nad tym od dwunastu godzin i mówiąc krótko: dupa :P

Będę zobowiązany za wszelką pomoc... może w końcu i ja będę umiał pomóc członkom tego forum :)

Re: [php] preg_replace w akcji - szukam pomocy

: wt lut 02, 2010 12:35 pm
autor: MirVanos
Witam
Na pewno można to zrobić lepiej, ale tak na szybko może Ci się przydać :

Kod: Zaznacz cały

$html = preg_replace("/<img class=\"miniaturka_prettyPhoto\" style=\"float:\sleft;\" src=\"(.*?)\" alt=\"\" width=\"780\" height=\"585\".*>/e",
            "'<a rel=\"prettyPhoto\" href=\"'.'\\1'.'\">
                <img class=\"prettyPhoto\" style=\"float: left;\" src=\"lib/thumbs.php?img=\"'.urlencode('\\1').'\" />
            </a>'",
              $html);

Re: [php] preg_replace w akcji - szukam pomocy

: wt lut 02, 2010 2:18 pm
autor: Adonistrator
Dzięki...
Zapomniałem dodać, że kolejność tagów może być różna... I tak samo może niektórych wcale nie być - np. style... Wtedy to raczej nie zadziała :(

Ale znalazłem coś bardzo ciekawego:
PHP Simple HTML DOM Parser
http://simplehtmldom.sourceforge.net/

Jak uda mi się za pomocą tego narzędzia osiągnąć odpowiedni efekt to na pewno napiszę :)