Видаліть усі теги html із рядка php


81

Я хочу відобразити перші 110 символів запису бази даних. Поки що досить просто:

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

Але у наведеному вище записі є HTML-код, який ввів клієнт. Отож відображається:

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

Очевидно, нічого хорошого.

Я просто хочу видалити весь html-код, тому мені потрібно видалити все між <і> із запису db, ПОТІМ відобразити перші 100 символів.

Будь-які ідеї?


зразок введення та виведення .........
Венката Крішна

Відповіді:


141

використання 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) . "..."; ?>

Чому не працює? :( Я використовую: data = htmlentities ($ description2, ENT_QUOTES, 'UTF-8');, strip_tags ($ data) і не працює

Я вирішив за допомогою uft8_encode :), здається, strip_tags не можуть перевизначити htmlentities

це також захистить сторінку від атак сценаріїв xss?
thekucays

1
@delive Чому б ти htmlentitiesтоді бігав strip_tags? Це повністю перемагає мету.
Капітан Гіпертекст

Це може не блокувати певні типи JavaScript. Не чекайте чудес від цієї функції.
PJ Brunet

18

Використовуйте функцію strip_tags () PHP .

Наприклад:

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


print($businessDesc);

2
Спочатку це займе 100 символів, а після цього видаліть теги html. Але я думаю, що OP хоче спочатку видалити теги html, а після цього substr 100 символів.
Йогеш Сутар

1
@YogeshSuthar Дуже правда, я відредагую відповідь зараз, дякую, що вказали на це. - Готово
EM-Creations

11

Видаліть усі теги HTML із рядка PHP із вмістом!

Скажімо, у вас є рядок, що містить прив'язувальний тег, і ви хочете видалити цей тег із вмістом, тоді цей метод буде корисним.

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

Вихід:

Lorem Ipsum - це просто фіктивний текст поліграфічної та набірної промисловості.


1
Майже. Розділ 12.1.2.2.4 WhatWG говорить про </script >дійсний кінцевий тег, але регулярний вираз не обробляє його. Має бути </\1\s*>або щось таке.
єпископ

6

використовувати цей регулярний вираз: /<[^<]+?>/g

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

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

з вашого прикладу має залишитися: Ref no: 30001


5
strip_tags є, чому регулярний вираз?

1
Не зовсім впевнений, але я думаю, що це не вловить самозакриваються теги, які містять пробіли: <br />або <special />. Я також думаю, що це не враховує хакі, як-от <b<b>></</b>>до уваги.
kaiser

Думаю, кайзер strip_tags
посилався

Це краще рішення, ніж PHP strip_tag. PHP strip_tag видалить як відкриття, так і закриття елемента HTML Script. Однак якщо ваш користувач розміщує лише початковий елемент сценарію HTML, тоді PHP strip_tag не видалить його. Тоді ваша веб-сторінка, швидше за все, відображатиметься зовсім неправильно. Перевірено на PHP версії 5.6.19. Цей невеликий регулярний вираз виправив ті часткові теги HTML, які можуть спричинити проблеми, через які strip_tag буде пропущений. Браво!
ptay

Проблема полягає в тому, що іноді користувач пише невірний html, тому, наприклад, <div Ім'я клієнта <div>hello> </div>, а позов strip_tag видалить все ... і дещо ми хочемо більш збереженого способу, тому я б пішов із регулярним виразом ... "Оскільки strip_tags () насправді не перевіряє HTML, часткові або пошкоджені теги можуть призвести до видалення більшої кількості тексту / даних, ніж очікувалося."
Мігель

2

Для мене це найкраще рішення.

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

У laravel ви можете використовувати наступний синтаксис

 @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); ?>

Або якщо у вас є вміст, що надходить із бази даних;

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


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

Спробуйте це

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.