Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z preg_replace
Forum PHP.pl > Forum > PHP
jpowie01
Siema,
Wpadłem na pewien pomysł na portal. Nie chce zdradzać szczegółów. Jak skończę to się podzielę wynikiem prac :) Na razie idzie dosyć dobrze no ale napotkałem prozaiczny(?) problem.. Sam nie wiem dlaczego ten kod nie działa. Jego zadaniem było usunięcie wszelkich Flash'owych elementów ze źródła strony.
Rzućcie okiem na ten fragment kodu:

  1. <?php
  2. $page = file_get_contents('http://onet.pl');
  3. $page = preg_replace('{<object(.*?)>(.*?)</object>}', ' ', $page);
  4. $page = preg_replace('{<embed(.*?)>}', ' ', $page);
  5. echo $page;
  6. ?>


Niby wszystko ok. No ale nie działa.
Moje pytanie brzmi : Dlaczego ?
Myślę, że jestem dosyć ogarnięty w PHP. Aczkolwiek wyrażenia regularne u mnie totalnie leżą. Jestem samoukiem. Może dlatego :)

Pozdrawiam,
jpowie01
by_ikar
Jak chcesz się pozbyć tagów, to użyj strip_tags, podaj tagi jakich chcesz się pozbyć i tyle. Pozatym, nie musisz wielokrotnie używać preg_replece, ponieważ możesz wyrażenie podać w tablicy. Również średnio mam się z wyrażeniami, ale ostatnio lepiej, od czasu kiedy pisałem na swoje potrzeby router i stety trzeba było się trochę tego poduczyć.
jpowie01
Nie pomyślałem o tej funkcji :) Dzięki za przypomnienie.
No ale po przypomnieniu sobie informacji z manuala dowiedziałem się, że w funkcji można ustalić tylko wyjątki, które ma pominąć. A ja chciałbym się pozbyć tylko konkretnych znaczników. Nie całej reszty oprócz np. <object>.
Jak to ugryźć, aby działało ?
cycofiasz
Spróbuj dodać po } literę s , może coś się zmieni. Jednakże pamiętaj że flasha można osadzić także przez javascript...
by_ikar
Komentarze też przeglądaj do manuala, często rozwiązują dość popularne problemu. Odwrotność strip_tag: http://www.php.net/manual/en/function.strip-tags.php#100054 wink.gif
jpowie01
@cycofiasz
Dodanie litery nic nie zmieniło. Ale rada o JS się przyda :) Dzięki.

@by_ikar
Czytałem komentarze, ale trochę się spieszyłem i możliwe, że ją pominąłem. Ale sęk w tym, że też nie działa. Nawet gdy wpisze jakieś inne tagi, np. h1, a, p. Usuwa nie tylko tekst w tych znacznikach ale także obok (0.o). Podczas tagu 'p' nic nie wyświetlił. Przy 'h2' zostawił samą stopkę serwisu. Przy 'object' nie działa, a 'embed' nie zadziała, bo w funkcji tego usera potrzebny jest znacznik zamykający, a w 'embed' go brak. Po za tym funkcja działa w oparciu o preg_replace. Czyli myślenie jest takie samo jak moje początkowe. Muszę dobrze ustawić wyrażenie regularne i powinno działać. Najgorsze jest to, że w Internecie jest chaos na ten temat, a jakiś przykładów brak. Wszędzie to samo ;/
mls
Delimiter musi być identyczny - czyli zamiast "{" i "}" albo "{" albo "}" w obu przypadkach. Najlepiej stosować sprawdzone, popularne wręcz delimitery - "/" i "#".
jpowie01
Dzięki wielkie ! Działa :D
Hash pomógł. Nigdy bym na to nie wpadł.

Pozdrawiam,
jpowie01
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.