Php HTML-tags verwijderen. PHP: hoe verwijder ik HTML-tags uit tekst? Verwijder individuele html-tags uit tekst

De taak om alle of slechts bepaalde html-tags uit een string te verwijderen doet zich vaak voor wanneer het nodig is om elke paginabezoeker de mogelijkheid te bieden nieuwe informatie toe te voegen. Het meest voorkomende voorbeeld is een gastenboek of een commentaarsysteem op een website. De op deze manier toegevoegde tekst kan veel verschillende tags bevatten, die per ongeluk zijn toegevoegd bij het kopiëren van de tekst of die opzettelijk zijn toegevoegd om het bericht op de een of andere manier "zeer origineel" te maken. Het is ook de moeite waard om kwaadwillige pogingen te noteren om kwaadaardige code in scripttags in de site te introduceren of een poging om de pagina-indeling te bederven met onnodige tags.

In elk van de bovenstaande gevallen is het nodig om onnodige html-tags te verwijderen voordat nieuwe informatie wordt opgenomen.

Volledige verwijdering van tekst uit html-tags

Voor dergelijke taken worden vaak reguliere expressies gebruikt, maar in dit artikel zullen we kijken naar de eenvoudigste methode: tags verwijderen met behulp van de strip_tags PHP-functie. Deze functie verwijdert eenvoudigweg tags uit de tekenreeks die in de parameter is opgegeven.

$str_in = "

Mijn tekst van verscheidene labels.

" ;
$str_out = strip_tags($str_in);
echo $str_out;

Als resultaat van deze verwerking krijgen we een string zonder tags in de $str_out variabele:

Mijn tekst met verschillende tags.

* Het is vermeldenswaard dat de functie strip_tags alleen de tags zelf verwijdert, en hun inhoud tussen de openings- en sluitingstags laat staan.

Verwijder individuele html-tags uit tekst

Soms hoeft u alleen bepaalde tags uit een string te verwijderen. Hier zullen we ook de functie strip_tags gebruiken, maar deze keer zullen we de tags specificeren die moeten worden opgeslagen als de tweede (optionele) parameter.

Bij het verwerken van een string hoeft u bijvoorbeeld alleen links achter te laten:

$str_in = "

Mijn tekst van verscheidene labels.

" ;
$str_out = strip_tags($str_in, " " );
echo $str_out;

Als resultaat van deze verwerking in de variabele $str_out krijgen we:

Mijn tekst met verschillende tags.

Op deze manier kunnen alle tags die geldig zijn in een string worden gespecificeerd terwijl alle andere worden verwijderd.


In dit artikel wordt de eenvoudigste manier besproken om een ​​reeks tags te wissen. Terwijl ik andere opties overweeg, zal ik dit artikel uitbreiden. Ik zou het leuk vinden als u in de opmerkingen of per e-mail uw opties voor het oplossen van dit probleem voorstelt.

JavaScript is geblokkeerd in uw browser. Schakel JavaScript in om de site te laten functioneren!

strip_tags

(PHP 3 >= 3.0.8, PHP 4, PHP 5)

strip_tags - Verwijdert HTML- en PHP-tags uit een string Beschrijving string strip_tags (string str [, string toegestane_tags])

Deze functie retourneert de tekenreeks str zonder HTML- en PHP-tags. Om tags te verwijderen wordt een automaat gebruikt die vergelijkbaar is met de automaat die wordt gebruikt in de functie fgetss().

Een optioneel tweede argument kan worden gebruikt om tags op te geven die niet mogen worden verwijderd.

Opmerking: het argument allowable_tags is toegevoegd in PHP 3.0.13 en PHP 4.0b3. HTML-opmerkingen zijn ook verwijderd uit PHP 4.3.0.

Aandacht

Omdat strip_tags() de juistheid van de HTML-code niet controleert, kunnen onvolledige tags leiden tot het verwijderen van tekst die geen deel uitmaakt van de tags.

Voorbeeld 1. Voorbeeld van het gebruik van strip_tags() $text = "

Paragraaf.

Nog een beetje tekst"; echo strip_tags($text); echo "\n\n-------\n"; // niet verwijderen

Echo strip_tags($text, "

"); // Toestaan ,, echo strip_tags($text, " ");

Dit voorbeeld levert het volgende op:

Paragraaf. Nog wat tekst -------

Paragraaf.

Nog wat tekst

Aandacht

Deze functie verandert niets aan de kenmerken van tags die zijn opgegeven in het argument allowable_tags, inclusief stijl en onmouseover.

Vanaf PHP 5.0.0 is strip_tags() veilig om gegevens in binaire vorm te verwerken.

Deze functie heeft een belangrijk nadeel: het lijmt woorden aan elkaar bij het verwijderen van tags. Bovendien kent de functie kwetsbaarheden. Een alternatieve functie vergelijkbaar met strip_tags:

Zie ook functiebeschrijving

Absoluut iedereen wordt geconfronteerd met de taak om HTML te ontdoen van onnodige tags.

Het eerste dat in je opkomt is het gebruik van de strip_tags() php-functie:
string strip_tags (string str [, string toegestane_tags])

De functie retourneert een tekenreeks zonder tags. Tags die niet hoeven te worden verwijderd, worden doorgegeven als het argument allowable_tags. De functie werkt, maar is op zijn zachtst gezegd niet ideaal. Onderweg wordt er niet gecontroleerd op de geldigheid van de code, wat ertoe kan leiden dat tekst wordt verwijderd die niet in de tags is opgenomen.
Proactieve ontwikkelaars hebben niet stilgezeten; verbeterde functies zijn online te vinden. Een goed voorbeeld is strip_tags_smart.

Het wel of niet gebruiken van kant-en-klare oplossingen is de persoonlijke keuze van de programmeur. Het gebeurt zo dat ik meestal geen "universele" handler nodig heb en dat het handiger is om de code op te schonen met reguliere expressies.

Wat bepaalt de keuze voor de ene of de andere verwerkingsmethode?

1. Van het bronmateriaal en de complexiteit van de analyse ervan.
Als je vrij eenvoudige HTML-teksten moet verwerken, zonder enige fancy lay-out, helder als de dag :), dan kun je standaardfuncties gebruiken.
Als de teksten bepaalde kenmerken hebben waarmee rekening moet worden gehouden, worden speciale handlers geschreven. Sommigen gebruiken eenvoudigweg str_replace . Bijvoorbeeld:

$s = array("â€" => "'", // Rechter-apostrof (bijvoorbeeld in I"m)
"“" => "“", // Openingstekst
"–" => "—", // Lang streepje
"â€" => "”", // Afsluitende toespraakmarkering
"Ã " => "é", // e acuut accent
Chr(226) . Chr(128) . chr(153) => "’", // Opnieuw apostrof naar rechts
Chr(226) . Chr(128) . chr(147) => "—", // Opnieuw een lang streepje
Chr(226) . Chr(128) . chr(156) => "“", // Openingstekst
Chr(226) . Chr(128) . chr(148) => "—", // Opnieuw M-streepje
Chr(226) . chr(128) => "”", // Rechter spraakteken
chr(195) . chr(169) => "é", // opnieuw acuut
);

foreach ($s als $needle => $replace)
{
$htmlText = str_replace($needle, $replace, $htmlText);
}

Anderen kunnen gebaseerd zijn op reguliere expressies. Als voorbeeld:

Functie getTextFromHTML($htmlText)
{
$search = array (""]*?>.*?"si", // JavaScript verwijderen
""]*?>.*?"si", // Stijlen verwijderen
""]*?>.*?"si", // XML-tags verwijderen
"""si", // HTML-tags verwijderen
""([\r\n])[\s] "", // Verwijder spaties
""&(quot|#34);"i", // Vervang speciale HTML-tekens
"&(amp|#38);"i",
"&(lt|#60);"i",
""&(gt|#62);"i",
"&(nbsp|#160);"i",
"&(iexcl|#161);"i",
"&(cent|#162);"i",
"&(pond|#163);"i",
"&(kopie|#169);"i",
""(\d);"e"); // schrijf als php

$replace = array("",
"",
"",
"",
"\\1",
"\"",
"&",
"",
" ",
Chr(161),
Chr(162),
Chr(163),
Chr(169),
"chr(\\1)");

Return preg_replace($search, $replace, $htmlText);
}
(Op zulke momenten is de mogelijkheid van preg_replace om met arrays als parameters te werken prettiger dan ooit). Indien nodig vul je het aanbod aan met je eigen vaste klanten. Deze reguliere expressie-constructor kan u bijvoorbeeld helpen bij het samenstellen ervan. Beginnende ontwikkelaars kunnen het artikel "Alles over HTML-tags. 9 reguliere expressies om HTML-tags te verwijderen" nuttig vinden. Kijk naar de voorbeelden daar, analyseer de logica.

2. Van volumes.
Volumes houden rechtstreeks verband met de complexiteit van de analyse (uit de vorige paragraaf). Een groot aantal teksten vergroot de kans dat u, terwijl u alles op een regelmatige manier probeert te plannen en op te ruimen, iets mist. In dit geval is de “meerfasige” reinigingsmethode geschikt. Dat wil zeggen: maak het eerst schoon, bijvoorbeeld met de functie strip_tags_smart (we verwijderen de broncode niet, voor het geval dat). Vervolgens beoordelen we selectief een bepaald aantal teksten om “afwijkingen” te identificeren. Welnu, we ‘ruimen’ de afwijkingen op met reguliere regels.

3. Van wat als resultaat moet worden verkregen.
Het verwerkingsalgoritme kan afhankelijk van de situatie op verschillende manieren worden vereenvoudigd. Het geval dat ik in een van mijn vorige artikelen heb beschreven, laat dit goed zien. Ik wil u eraan herinneren dat de tekst daar in een div stond, waarin daarnaast ook een div met "broodkruimels", een Adsense-advertentie en een lijst met soortgelijke artikelen stond. Bij het analyseren van een steekproef van artikelen werd ontdekt dat de artikelen geen afbeeldingen bevatten en eenvoudigweg in paragrafen waren verdeeld met behulp van . Om de “hoofd” div niet te verwijderen van overbodige zaken, kun je alle paragrafen vinden (met Simple HTML DOM Parser is dit heel eenvoudig) en hun inhoud combineren. Dus voordat je een regelmatige schoonmaakroutine gaat bedenken, kijk of je met een beetje bloed rond kunt komen.

Over het algemeen laaien er op internet echte vuurgevechten op tussen voorstanders van het parseren van HTML-code, puur gebaseerd op reguliere expressies, en het parseren, dat is gebaseerd op de analyse van de DOM-structuur van een document. Bijvoorbeeld bij overloop. Onschuldig op het eerste gezicht

Wanneer u via hetzelfde programma gegevens van gebruikers ontvangt, is het zinvol om de door hen verzonden gegevens te verwerken en pure tekst als uitvoer te ontvangen.

Ik zal je nu vertellen hoe dit op verschillende manieren kan worden gedaan.

Hoe verwijder ik alle HTML-tags uit een string in PHP?

Er is een functie in PHP genaamd "strip_tags". Hiermee kunt u snel en eenvoudig alle HTML-tags uit een variabele verwijderen.

Uitvoering:

In dit geval slaan we de tags op

EN . Tags met een afsluitende tag hoeven bij het opslaan niet te worden opgegeven.

Houd er rekening mee dat de functie de HTML-opmaak niet controleert op geldigheid, en als er niet-gesloten tags zijn, loopt u het risico platte tekst kwijt te raken.

Hoe verwijder ik alle HTML-tags uit een string in JavaScript?

We zullen onze eigen kleine functie in JavaScript schrijven, waarmee we vervolgens de ontvangen gegevens zullen verwerken.

Uitvoering:

function strip(html) ( var tmp = document.createElement("div"); tmp.innerHTML = html; return tmp.textContent || tmp.innerText; ) var content = strip("Hallo wereld!");

Dit voorbeeld werkt op een specifieke gegeven variabele, maar u kunt deze opnieuw maken zodat deze past bij de ontvangen inhoud, bijvoorbeeld uit het invoerveld.