2009-04-17 11 views
9

Zanim zaczniemy, strip_tags() nie działa.php regex do usunięcia HTML

teraz

Mam pewne dane, które muszą być przetwarzane, jest problem, muszę pozbyć się wszystkich HTML, który został sformatowany bardzo dziwnie. znaczniki wyglądać następująco: (zauważyć spacje)

<p> blah blah blah </p > < a href= " link.html " > blah blah blah </a> 

Wszystkie regexs Próbowałam nie pracują, a ja nie wiem wystarczająco dużo o regex formatowania do ich pracy. Nie dbam o zachowanie jakichkolwiek elementów wewnątrz tagów i wolałbym, jeśli to możliwe, pozbyć się tekstu wewnątrz linku.

Ktoś ma jakiś pomysł?

(I naprawdę trzeba po prostu usiąść i nauczyć się wyrażeń regularnych jeden dzień)

Odpowiedz

26

Czy

preg_replace('/<[^>]*>/', '', $content) 

pracę?

+1

zamiast '*' można użyć '+', ponieważ z '*' można również zastąpić '<>' jeśli znaleziono w tekście. – machineaddict

2

rozwiązanie, które nie jest idiotoodporny, ale działa za to, co napisali:

s/<[^>]*>//g 
1

sformatowany dziwnie? Czy to prawidłowy HTML, prawda? W takim przypadku nie dotknęłbym go wyrażeniami regularnymi. Przykłady tego, jak może to pójść nie tak i dlaczego to zły pomysł to legion. Zamiast tego użyłbym na przykład HTML Tidy, aby na przykład wyczyścić niepotrzebną białą przestrzeń.

+0

Zamierzałem to opublikować, ale byłem zbyt zmęczony, by wyrazić to zrozumiale. +1. – strager

+0

Po uruchomieniu łańcucha znaków przez HTML Tidy zmienia znaki < and > tak, aby strip_tags() nadal na nich działał. Używałem zarówno tidy_parse_string() i tidy_repair_string(). Czy istnieje inna funkcja, która zadziała, której nie widzę? – Me1000

-2

http://ca3.php.net/strip_tags to prawdopodobnie to, czego potrzebujesz.

+0

strip_tags() nie działa (jak zaznaczono w pierwszym wierszu mojego pytania), ponieważ PHP nie rozpoznaje znaczników jako HTML ze względu na formatowanie. To była też moja pierwsza myśl. – Me1000

-2

Wypróbuj i daj mi znać.

<?php 
$text = '<p> blah blah blah </p > < a href= " link.html " > blah blah blah</a>'; 
echo strip_tags($text); 
echo "\n"; 
echo strip_tags($text, '<p><a>'); 
?> 
+0

strip_tags() nie działa (jak zaznaczono w pierwszym wierszu mojego pytania), ponieważ PHP nie rozpoznaje znaczników jako HTML. To była też moja pierwsza myśl. – Me1000

+0

Czy dodałeś to później? Całkowicie przegapiłem to ... Czy próbowałeś użyć preg_replace? –

+0

nie, post nie został w ogóle edytowany. Pytałem o regex, którego mogłem użyć. odpowiedź chaosu jest najprawdopodobniej tą, z której skończę korzystać, ale gdybym mógł użyć czystego html do oczyszczenia kodu, użyj strip_tags, który by się dobrze, ale nie mogę znaleźć funkcji w czystym html, który robi to, czego potrzebuję ; dlatego nie sprawdziłem odpowiedzi chaosu. :) – Me1000

12

strip_tags() będzie działać, jeśli używasz html_entity_decode() o zmiennej przed strip_tags()

<?php 
$text = '<p> blah blah blah </p > < a href= " link.html " > blah blah blah</a>'; 
echo strip_tags(html_entity_decode($text)); 
?> 
+0

to powinna być akceptowana odpowiedź. – dendini

+0

Dlaczego 'html_entity_decode' jest potrzebne? – alex