Entfernen Sie alle HTML-Tags aus der PHP-Zeichenfolge


80

Ich möchte die ersten 110 Zeichen eines Datenbankeintrags anzeigen. Bisher ziemlich einfach:

<?php echo substr($row_get_Business['business_description'],0,110) . "..."; ?>

Der obige Eintrag enthält jedoch HTML-Code, der vom Client eingegeben wurde. So zeigt es an:

<p class="Body1"><strong><span style="text-decoration: underline;">Ref no:</span></strong> 30001<strong></stro...

Offensichtlich nicht gut.

Ich möchte nur den gesamten HTML-Code entfernen, also muss ich alles zwischen <und> aus dem Datenbankeintrag entfernen, DANN die ersten 100 Zeichen anzeigen.

Irgendwelche Ideen jemand?


Beispiel Eingabe und Ausgabe .........
— Venkata Krishna

Antworten:


137

verwenden strip_tags

$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);   //output Test paragraph. Other text

<?php echo substr(strip_tags($row_get_Business['business_description']),0,110) . "..."; ?>

Warum nicht funktioniert? :( Ich benutze: data = htmlentities ($ description2, ENT_QUOTES, 'UTF-8'); strip_tags ($ data) und funktioniert nicht

Ich habe mit uft8_encode gelöst :), scheint strip_tags kann htmlentities nicht überschreiben

Würde dies die Seite auch vor xss-Scripting-Angriffen schützen?
— Thekucays

1
@delive Warum in aller Welt würdest du rennen htmlentitiesund dann strip_tags? Das macht den Zweck völlig zunichte.
— Kapitän Hypertext

Bestimmte Arten von JavaScript werden möglicherweise nicht blockiert. Erwarten Sie keine Wunder von dieser Funktion.
— PJ Brunet

18

Verwenden Sie die Funktion strip_tags () von PHP .

Zum Beispiel:

$businessDesc = strip_tags($row_get_Business['business_description']);
$businessDesc = substr($businessDesc, 0, 110);


print($businessDesc);

2
Dies nimmt zuerst die 100 Zeichen und entfernt danach die HTML-Tags. Aber ich denke, OP möchte zuerst HTML-Tags und danach 100 Zeichen entfernen.
— Yogesh Suthar

1
@YogeshSuthar Sehr wahr, ich werde die Antwort jetzt bearbeiten, danke, dass Sie darauf hingewiesen haben. - Fertig
— EM-Creations

11

Entfernen Sie alle HTML-Tags aus der PHP-Zeichenfolge mit Inhalt!

Angenommen, Sie haben eine Zeichenfolge, die ein Ankertag enthält, und Sie möchten dieses Tag mit Inhalt entfernen, dann ist diese Methode hilfreich.

$srting = '<a title="" href="https://stackoverflow.com/index.html"><b>Some Text</b></a>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.';

echo strip_tags_content($srting);

function strip_tags_content($text) {

    return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);
    
 }

Ausgabe:

Lorem Ipsum ist einfach Dummy-Text der Druck- und Satzindustrie.


1
Fast. Abschnitt 12.1.2.2.4 von WhatWG sagt, dass </script >es sich um ein gültiges End-Tag handelt, das jedoch nicht vom regulären Ausdruck behandelt wird. Sollte sein </\1\s*>oder so.
— Bischof

6

Verwenden Sie diesen regulären Ausdruck: /<[^<]+?>/g

$val = preg_replace('/<[^<]+?>/g', ' ', $row_get_Business['business_description']);

$businessDesc = substr(val,0,110);

von Ihrem Beispiel sollte bleiben: Ref no: 30001


5
strip_tags gibt es, warum Regex?

1
Nicht ganz sicher, aber ich denke, es werden keine selbstschließenden Tags abgefangen, die Leerzeichen enthalten: <br />oder <special />. Ich denke auch, dass dies Hacks nicht <b<b>></</b>>berücksichtigt.
— Kaiser

Ich denke, Kaiser bezog sich auf diese Antwort, nichtstrip_tags
— pjmil

Dies ist eine bessere Lösung als PHP strip_tag. PHP strip_tag entfernt sowohl das öffnende als auch das schließende HTML-Skriptelement. Wenn Ihr Benutzer jedoch nur das öffnende HTML-Skriptelement einfügt, wird es von PHP strip_tag nicht entfernt. Dann wird Ihre Webseite sehr wahrscheinlich völlig falsch angezeigt. Getestet mit PHP Version 5.6.19. Diese kleine Regex hat die partiellen HTML-Tags behoben, die Probleme verursachen können, die strip_tag übersehen wird. Bravo!
— 25.

Das Problem ist, dass der Benutzer manchmal ungültiges HTML schreibt, z. B. <div Name des Clients <div> hallo> </ div>, und wenn Sie strip_tag verklagen, wird alles entfernt ... und einige, die wir besser erhalten möchten, Also würde ich mich für Regex entscheiden ... "Da strip_tags () den HTML-Code nicht wirklich validiert, können teilweise oder fehlerhafte Tags dazu führen, dass mehr Text / Daten als erwartet entfernt werden."
— Miguel

2

Für mich ist dies die beste Lösung.

function strip_tags_content($string) { 
    // ----- remove HTML TAGs ----- 
    $string = preg_replace ('/<[^>]*>/', ' ', $string); 
    // ----- remove control characters ----- 
    $string = str_replace("\r", '', $string);
    $string = str_replace("\n", ' ', $string);
    $string = str_replace("\t", ' ', $string);
    // ----- remove multiple spaces ----- 
    $string = trim(preg_replace('/ {2,}/', ' ', $string));
    return $string; 

}

0

In Laravel können Sie die folgende Syntax verwenden

 @php
   $description='<p>Rolling coverage</p><ul><li><a href="http://xys.com">Brexit deal: May admits she would have </a><br></li></ul></p>'
 @endphp
 {{  strip_tags($description)}}

0

<?php $data = "<div><p>Welcome to my PHP class, we are glad you are here</p></div>"; echo strip_tags($data); ?>

Oder wenn Sie einen Inhalt aus der Datenbank haben;

<?php $data = strip_tags($get_row['description']); ?> <?=substr($data, 0, 100) ?><?php if(strlen($data) > 100) { ?>...<?php } ?>

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.