Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Usunęcie tagu ze stringa, Usunięcie tagu href
Laran
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 20.03.2013

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


Witam.

Mam problem z usunięciem tagu href z fragmentów wyglądających mniej więcej tak:
  1. <a class="image" title="Title" href="/File:image.jpg">

Chodzi o usunięcie tego fragmentu:
  1. href="/File:XXX"

Ważne żeby usunąć href'a tylko jeśli jego wartość zaczyna się na /File: a wszystkie inne href'y zostawić. Próbowałem to zrobić używając preg_replace, ale poległem.

Pozdrawiam.

Ten post edytował Laran 20.04.2014, 16:52:35
Go to the top of the page
+Quote Post
Turson
post
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


  1. $text = '<a class="image" title="Title" href="/File:image.jpg"></a>
  2. <a class="image" title="Title" href="File:image.jpg"></a>';
  3. $new = preg_replace('/href="\/File.+"/i', null, $text);
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Wyrażenia regularne bardzo słabo sprawdzą się przy tego typu zadaniu (zresztą jak w ~95% przypadków, gdy trzeba parsować HTML).

1. DOMDocument -> loadHTML,
2. DOMXPath przy pomocy którego możesz wyszukać wszystkie elementy A, z atrybutem HREF rozpoczynającym się od /File:,
3. DOMElement::removeAttribute usunie atrybut,
4. DOMDocument::saveHTML zwróci tekstową reprezentację zmodyfikowanego HTML-a.

PS. Kod podany przez @Turson nie uwzględni przypadków gdy atrybut HREF otoczony jest apostrofami, bądź w ogóle nie jest niczym otoczony (niestety HTML na takie coś pozwala). Nie zadziała w przypadku pojawienia się spacji przed/po znaku równości. Usunie HREF z elementów innych niż A. Usunie tekst href="/File:image.jpg" z czegoś takiego:
  1. <p>Chciałbym usunąć href="/File:image.jpg" z elementu A.</p>
Jak widać jest to niezbyt solidne rozwiązanie.
Go to the top of the page
+Quote Post
Laran
post
Post #4





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 20.03.2013

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


Dzięki za pomoc. W rezultacie wygląda to tak:
  1.  
  2. $dom = new DOMDocument;
  3. $dom->loadHTML($string);
  4. $xpath = new DOMXPath($dom);
  5. $nodes = $xpath->query('//a[@class="image"]');
  6. foreach ($nodes as $node)
  7. {
  8. $node->removeAttribute('href');
  9. }
  10. $content2 = $dom->saveHTML();


Łatwiej mi było znaleźć odpowiednie tagi a po klasie "image", a potem usunąć z nich link niż szukać po href="/File:XXX", ale to tylko dlatego że mam problemy z regex.

Do zamknęcia.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 11:58