Usuń wszystkie tagi html z ciągu php

81

Chcę wyświetlić pierwsze 110 znaków pozycji bazy danych. Jak dotąd dość łatwe:

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

Ale powyższy wpis zawiera kod HTML, który został wprowadzony przez klienta. Więc wyświetla:

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

Oczywiście nic dobrego.

Chcę po prostu usunąć cały kod html, więc muszę usunąć wszystko między <i> z wpisu db, a następnie wyświetlić pierwsze 100 znaków.

Jakieś pomysły?

jimbeeer
źródło
przykładowe wejście i wyjście .........
Venkata Krishna

Odpowiedzi:

141

posługiwać się 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
źródło
Dlaczego nie działa? :( Używam: data = htmlentities ($ description2, ENT_QUOTES, 'UTF-8');, strip_tags ($ data) i nie działa
Rozwiązałem za pomocą uft8_encode :), wydaje się, że strip_tags nie może zastąpić htmlentities
czy zabezpieczy to również stronę przed atakami skryptów xss?
thekucays
1
@delive Po co, u licha, biec htmlentitiesi wtedy strip_tags? To całkowicie mija się z celem.
Captain Hypertext
Może nie blokować niektórych rodzajów JavaScript. Nie oczekuj cudów od tej funkcji.
PJ Brunet
18

Użyj funkcji strip_tags () PHP .

Na przykład:

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


print($businessDesc);
Kreacje EM
źródło
2
Najpierw zajmie to 100 znaków, a następnie usunie tagi HTML. Ale myślę, że OP chce najpierw usunąć tagi html, a potem substr 100 znaków.
Yogesh Suthar
1
@YogeshSuthar To prawda, edytuję teraz odpowiedź, dziękuję za wskazanie tego. - Gotowe
EM-Creations
11

Usuń wszystkie tagi HTML z łańcucha PHP z zawartością!

Powiedzmy, że masz ciąg zawierający tag kotwicy i chcesz usunąć ten tag z zawartością, ta metoda będzie pomocna.

$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);
    
 }

Wynik:

Lorem Ipsum to po prostu fikcyjny tekst z branży poligraficznej i składu.

Muhammad Shahzad
źródło
1
Prawie. Sekcja 12.1.2.2.4 z WhatWG mówi, że </script >jest prawidłowym znacznikiem końcowym, ale nie jest obsługiwana przez wyrażenie regularne. Powinien być </\1\s*>lub coś takiego.
biskup
6

użyj tego wyrażenia regularnego: /<[^<]+?>/g

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

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

z twojego przykładu powinno pozostać: Ref no: 30001

Maxim Shoustin
źródło
5
strip_tags jest tam, dlaczego regex?
1
Nie do końca jestem pewien, ale myślę, że nie przechwyci samozamykających się tagów zawierających spacje: <br />lub <special />. Myślę też, że to nie bierze <b<b>></</b>>pod uwagę hacków .
kaiser
Myślę, że Kaiser odnosił się do tej odpowiedzi, a niestrip_tags
pjmil
To lepsze rozwiązanie niż PHP strip_tag. PHP strip_tag usunie zarówno otwierający, jak i zamykający element skryptu HTML. Jeśli jednak użytkownik umieści tylko otwierający element HTML Script, PHP strip_tag nie usunie go. Wtedy najprawdopodobniej Twoja strona internetowa będzie wyświetlana całkowicie nieprawidłowo. Testowane z PHP w wersji 5.6.19. To małe wyrażenie regularne naprawiło te częściowe tagi HTML, które mogą powodować problemy, które zostaną pominięte przez strip_tag. Brawo!
ptay,
Problem polega na tym, że czasami użytkownik napisze nieprawidłowy html, więc na przykład <div Nazwa klienta <div>hello> </div>, a pozew strip_tag usunie wszystko ... i czasami chcemy zachować bardziej bezpieczny sposób, więc poszedłbym z wyrażeniem regularnym ... "Ponieważ strip_tags () w rzeczywistości nie sprawdza poprawności HTML, częściowe lub uszkodzone tagi mogą spowodować usunięcie większej ilości tekstu / danych niż oczekiwano."
Miguel
2

Dla mnie to najlepsze rozwiązanie.

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.
źródło
0

W laravel możesz użyć następującej składni

 @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
źródło
0

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

Lub jeśli masz treść pochodzącą z bazy danych;

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

Mykel2503
źródło
0
$string = <p>Awesome</p><b> Website</b><i> by Narayan</i>. Thanks for visiting enter code here;
$tags = array("p", "i");

echo preg_replace('#<(' . implode( '|', $tags) . ')(?:[^>]+)?>.*?</\1>#s', '', $string);

Spróbuj tego

Ajeet kumar
źródło