Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problem z preg_replace
jpowie01
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
by_ikar
post
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
jpowie01
post
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
cycofiasz
post
Post #4





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Spróbuj dodać po } literę s , może coś się zmieni. Jednakże pamiętaj że flasha można osadzić także przez javascript...
Go to the top of the page
+Quote Post
by_ikar
post
Post #5





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
jpowie01
post
Post #6





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


@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 ;/
Go to the top of the page
+Quote Post
mls
post
Post #7





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Delimiter musi być identyczny - czyli zamiast "{" i "}" albo "{" albo "}" w obu przypadkach. Najlepiej stosować sprawdzone, popularne wręcz delimitery - "/" i "#".
Go to the top of the page
+Quote Post
jpowie01
post
Post #8





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


Dzięki wielkie ! Działa :D
Hash pomógł. Nigdy bym na to nie wpadł.

Pozdrawiam,
jpowie01
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 15:09