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.