Potrzebuję usunąć znaczniki zakotwiczenia z jakiegoś tekstu i nie można tego zrobić za pomocą wyrażeń regularnych.
Tylko znaczniki zakotwiczenia, a nie ich treść.
Na przykład <a href="http://www.google.com/" target="_blank">google</a>
stanie się google
.Usuń kotwicę z tekstu
Odpowiedz
Dokładnie, to nie może być właściwie wykonywane za pomocą wyrażenia regularnego.
Oto przykład przy użyciu DOM:
$xml = new DOMDocument();
$xml->loadHTML($html);
$links = $xml->getElementsByTagName('a');
//Loop through each <a> tags and replace them by their text content
for ($i = $links->length - 1; $i >= 0; $i--) {
$linkNode = $links->item($i);
$lnkText = $linkNode->textContent;
$newTxtNode = $xml->createTextNode($lnkText);
$linkNode->parentNode->replaceChild($newTxtNode, $linkNode);
}
Ważne pętli wstecz, kiedy zmiany zostaną wprowadzone do DOM.
Szukasz strip_tags()
.
<?php
// outputs 'google'
echo strip_tags('<a href="http://www.google.com/" target="_blank">google</a>');
Potrzebuję zachować inne znaczniki, tylko ja trzeba usunąć kotwice. – Lior
@Lior ah, Rozumiem. 'strip_tags' faktycznie tego nie robi. W notatkach przesłanych przez użytkowników znajduje się implementacja, która może pomóc: http://php.net/manual/en/function.strip-tags.php # 100054 –
@Pekka Możesz przekazać drugi argument do 'strip_tags()', który jest ciągiem "allowable_tags": http://php.net/manual/en/function.strip-tags.php. – Jasper
użyciu regex:
preg_replace('/<a[^>]+>([^<]+)<\/a>/i','\1',$html);
Co jeśli w elementach kotwicy znajduje się element '
Następnie można spróbować
preg_replace('/<\/?a[^>]*>/','',$Source);
Próbowałem go online here on rubular
To nie jest poprawne, ponieważ spowoduje również usunięcie innych znaczników zaczynających się od podobnego artykułu lub adresu. – LarS
może lepsze regex: preg_replace ('/ <\ s * \ /? \ S * a (?: \ S * | \ s + [^>] *)> /', '', $ vars ['panele']); – LarS
@ CSᵠ odpowiedź jest lepsza dla usunięcia nawet środkowego tekstu "a" tagi – Sadee
spróbować z:
$str = '<p>paragraph</p><a href="http://www.google.com/" target="_blank" title="<>">google -> foo</a><div>In the div</div>';
// first, extract anchor tag
preg_match("~<a .*?</a>~", $str, $match);
// then strip the HTML tags
echo strip_tags($match[0]),"\n";
wyjściowa:
google -> foo
Na to pytanie już udzielono odpowiedzi, ale pomyślałem, że dodam moje rozwiązanie do miksu. Podoba mi się to lepiej niż przyjęte rozwiązanie, ponieważ jest trochę bardziej do rzeczy.
To jest ładne i proste, można również użyć '$ content = preg_replace (array ('' "', '"" '), array (' ',' '), $ content); w przypadku "href" nie jest pierwszym atrybutem w anchorze etykietka. –
@DavidThomas świetny dodatek! – user1491929
Większość tutejszego regexu nie pomogła mi. Niektóre z nich usuwają zawartość wewnątrz zakotwiczenia (co wcale nie jest wymagane przez OP), a nie cała treść, część z nich będzie pasować do każdego tagu zaczynającego się od a, itp.
To jest to, co ja stworzony dla moich potrzeb w pracy. Mieliśmy problem z przekazywaniem HTML do wkhtmltopdf, który miał znaczniki zakotwiczenia (z wieloma atrybutami danych i innymi atrybutami) czasami uniemożliwiałoby tworzenie pliku PDF, dlatego chciałem je usunąć, zachowując tekst.
Regex:
/</a ([^>] *)>/ig
W PHP można zrobić:?
$text = "<a href='http://www.google.com/'>Google1</a><br>" .
"<a>Google2</a><br>" .
"<afaketag href='http://www.google.com'>Google2</afaketag><br>" .
"<afaketag>Google4</afaketag><br>" .
"<a href='http://www.google.com'><img src='someimage.jpg'></a>";
echo preg_replace("/<\/?a([^>]*)?>/i", "", $text);
Wyjścia:
Google1<br>Google2<br><afaketag href='http://www.google.com'>Google2</afaketag><br><afaketag>Google4</afaketag><br><img src='someimage.jpg'>
- 1. Get kotwicę z URI
- 2. Czyszczenie i zamiana tekstu: usuń \ n z tekstu w Javie
- 3. usuń wewnętrzny cień wprowadzania tekstu
- 4. JQuery: Jak wyodrębnić kotwicę z href
- 5. Wyodrębnianie kotwicę z adresu URL w Ruby
- 6. strona skok z div na kotwicę
- 7. Usuń pierwsze słowo w strumieniu tekstu
- 8. Korzystanie JSF h: outputLink produkować kotwicę stronę
- 9. Jak dodać kotwicę do przekierowania: do tyłu:
- 10. Jak przekierować do adresu URL zawierającego kotwicę (#)?
- 11. Usuń tag wokół węzła tekstu przy użyciu javascript
- 12. Zachowaj dwie pierwsze linie tekstu, usuń wszystko inne.
- 13. Usuń dane z RRDTool
- 14. Usuń tekst z jQuery
- 15. Usuń ikonę z JOptionPane
- 16. Usuń duplikat z tabeli
- 17. usuń z pliku
- 18. Usuń sekundy z toLocaleTimeString
- 19. Usuń prefiks z ciągiem
- 20. Usuń polyLine z mapyView
- 21. Usuń kolumnę z DataGridView
- 22. Usuń innerHTML z div
- 23. Usuń SelectedItem z TreeView
- 24. Usuń wiersz z QGridLayout
- 25. Usuń nagłówek z listyView
- 26. Usuń iframe z javascript
- 27. Usuń atrybut z XmlNode
- 28. Usuń pola z ModelForm
- 29. Usuń pozycję z listy
- 30. Usuń podpis z zespołu
fajna odpowiedź, ale w jaki sposób go używać? .. nie bardzo jasne na temat użycia. czy po prostu echo $ newTxtNode? lub lnkText ??? – jcobhams
@VyrenMedia Op zapytał, jak zastąpić linki przez ich zawartość tekstową, więc na końcu tej pętli masz obiekt "DOMDocument" bez linków. Możesz użyć '$ xml-> saveHTML();', aby uzyskać cały wynik HTML. $ lnkText zawiera bieżący tekst linku jako ciąg, a możesz chcieć [przyciąć] (http://php.net/trim) go. –
wielkie dzięki za odpowiedź @ Yann-Milin Znalazłem jednak rozwiązanie do wyrejestrowania dla tego problemu. – jcobhams