Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Usunęcie tagu ze stringa
Forum PHP.pl > Forum > Przedszkole
Laran
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.
Turson
  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);
Crozin
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.
Laran
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.
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.