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?

Jimbeeer
quelle
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) . "..."; ?>
Yogesh Suthar
quelle
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);
EM-Kreationen
quelle
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.

Muhammad Shahzad
quelle
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

Maxim Shoustin
quelle
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; 

}
David G.
quelle
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)}}
Krishnamoorthy Acharya
quelle
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 } ?>

Mykel2503
quelle