Очистка текста от лишних html-тегов — Парсинг от А до Я. Удаление из строки HTML тегов в PHP Звездочет tags php

  • 28.02.2024

Задача удалять все или только определенные html-теги из строки часто возникает там, где необходимо предоставить возможность любому посетителю страницы, добавлять новую информацию. Самым обычным примером может быть гостевая книга или система комментариев на сайте. Добавляемый таким образом текст может содержать множество различных тегов, добавленных случайно при копировании текста или намеренно, чтобы внести сообщение как-то "очень оригинально". Стоит отметить так же и злонамеренные попытки внести на сайт вредоносный код в тегах script или попытку испортить верстку страницы лишними тегами.

В любом из перечисленных случаев, возникает необходимость перед записью новой информации, очищать ее от лишних html-тегов.

Полная очистка текста от html-тегов

Часто для таких задач используются регулярные выражения, однако в этой статье рассмотрим самый простой метод – удаление тегов с помощью php-функции strip_tags. Эта функция просто удаляет теги из указанной в параметре строки.

$str_in = "

Мой текст с различными тегами.

" ;
$str_out = strip_tags($str_in);
echo $str_out;

В результате такой обработки в переменной $str_out получим строку без тегов:

Мой текст с различными тегами.

* Стоит обратить внимание, что функция strip_tags убирает только сами теги, оставляя их содержимое между открывающим и закрывающим тегом.

Удаление отдельных html-тегов из текста

Иногда нужно убрать только определенные теги из строки. Здесь мы так же воспользуемся функцией strip_tags, но в этот раз вторым (необязательным) параметром укажем теги, которые нужно сохранить.

Например, при обработке строки, нужно оставить только ссылки:

$str_in = "

Мой текст с различными тегами.

" ;
$str_out = strip_tags($str_in, "" );
echo $str_out;

В результате такой обработки в переменной $str_out получим:

Мой текст с различными тегами.

Таким образом, можно указать все теги, которые допустимы в строке, тогда как все остальные будут удалены.


В данной статье рассмотрен самый простой способ очистки строки от тегов. Рассматривая другие варианты, я буду расширять эту статью. Буду рад, если Вы предложите свои варианты решения этой задачи в комментариях или по электронной почте.

Проверка и обработка входящих данных является одной из распространённых задач в программировании. Язык PHP обычно используется для веб-приложений, поэтому здесь наиболее актуально удаление HTML тегов из текста, ведь именно они наиболее подверженны сторонним инъекциям. В данной статье я хочу напомнить Вам о старичке stip_tags() и его фишках, а также предложить решения для удаления секционных HTML тегов и ещё парочку полезных бонусов вдогонку.

И так. Основным нашим инструментом для удаления HTML тегов из текста является функция strip_tags (). Мы передаём ей строковое значение, а она удаляет из него HTML и PHP теги, например:

$s = "

Параграф.

Еще текст.";
echo strip_tags($s);

Этот пример выведет строку:

Параграф. Еще текст.

Примечательно здесь то, что у функции имеется и второй (не обязательный, но полезный) параметр, значением которого является строка с перечнем разрешенных HTML тегов, например:

$s = "

Параграф.

Еще текст.";
echo strip_tags($s, "

Этот пример выведет строку:

Параграф.

Еще текст.

По моему, очень удобно. Тем не менее, это не решает одну важную проблему - удаление секционных HTML тегов , например: script , noscript и style - они наиболее распространённые. Когда мне нужно убрать такие секционные теги, а также варианты начинающиеся с « < » и заканчивающиеся символом « > », я использую следующий PHP код:

$p = array(
""]*?>.*?"si",
""]*?>.*?"si",
""]*?>.*?"si",
"""si",
);
$r = array(" "," "," "," ");
$s = preg_replace($p, $r, $s);

Здесь переменная $p содержит массив регулярных выражений, а $r - массив соответствующей их замены (я использую пробелы) . Осталось лишь провести замену в строке, и мы уберём HTML мусор из текста.

Очевидно, что два выше приведённых решения можно совместить. В начале я использую замену через регулярные выражения, а потом strip_tags() и у меня получается своя функция nohtml() .

Напоследок хочу предложить Вам ещё несколько полезных решений. Так в тексте лучше заменить табуляцию пробелом, результат интерпретации того и другого в браузере идентичны, а хлопот будет меньше, например:

$s = str_replace("\t", " ", $s);

Если Вам не нужны переносы строк, их тоже можно заменить пробелами, например:

$s = str_replace(array("\n", "\r"), " ", $s);

От лишних же пробелов можно избавиться простым регулярным выражением, например:

$s = preg_replace("/\s+/", " ", $s);
$s = trim($s); // будет не лишним

На этом у меня всё. Спасибо за внимание. Удачи!

в 21:56 Изменить сообщение

У Вас в браузере заблокирован JavaScript. Разрешите JavaScript для работы сайта!

strip_tags

(PHP 3 >= 3.0.8, PHP 4, PHP 5)

strip_tags - Удаляет HTML и PHP тэги из строки Описание string strip_tags (string str [, string allowable_tags])

Эта функция возвращает строку str, из которой удалены HTML и PHP тэги. Для удаления тэгов используется автомат, аналогичный примененному в функции fgetss() .

Необязательный второй аргумент может быть использован для указания тэгов, которые не должны удаляться.

Замечание: Аргумент allowable_tags был добавлен в PHP 3.0.13 и PHP 4.0b3. С версии PHP 4.3.0 удаляются также HTML комментарии.

Внимание

Так как strip_tags() не проверяет корректность HTML кода, незавершенные тэги могу привести к удалению текста, не входящего в тэги.

Пример 1. Пример использования strip_tags() $text = "

Параграф.

Еще немного текста"; echo strip_tags($text); echo "\n\n-------\n"; // не удалять

Echo strip_tags($text, "

"); // Разрешаем ,, echo strip_tags($text, "");

Этот пример выведет:

Параграф. Еще немного текста -------

Параграф.

Еще немного текста

Внимание

Эта функция не изменяет атрибуты тэгов, указанных в аргументе allowable_tags, включая style и onmouseover.

С версии PHP 5.0.0 strip_tags() безопасна для обработки данных в двоичной форме.

У данной функции есть существенный недостаток - это склейка слов при удалении тегов. Кроме этого функция имеет уязвимости. Альтернативная функция аналог strip_tags:

Смотрите также описание функции

Когда вы принимаете данные от пользователей, через ту же , есть смысл обрабатывать передаваемые от них данные и получать на выходе чистый текст.

Как это можно сделать разными способами, я сейчас расскажу.

Как удалить все HTML-теги из строки на PHP?

В PHP существует функция под названием «strip_tags ». С помощью нее можно быстро и просто удалить все HTML- теги из переменной.

Реализация:

В таком случае мы сохраняем теги

И . У тегов, имеющих закрывающий тег, прописывать при сохранении его не нужно.

Обратите внимание , функция не проверяет HTML-разметку на валидность, и если есть незакрытые теги, то вы рискуете потерять обычный текст.

Как удалить все HTML-теги из строки на JavaScript?

В JavaScript мы напишем свою небольшую функцию, с помощью которой в последующем и будем обрабатывать полученные данные.

Реализация:

function strip(html) { var tmp = document.createElement("div"); tmp.innerHTML = html; return tmp.textContent || tmp.innerText; } var content = strip("Hello, world!");

Этот пример работает на конкретной заданной переменной, вы же можете переделать его под полученное содержимое, например, из поля input.




Сайт компьютерной помощи

© Copyright 2024,
rzdoro.ru -Сайт компьютерной помощи

  • Рубрики
  • Программы
  • Microsoft Office
  • Интернет
  • Linux
  • Программы
  • Microsoft Office
  • Интернет
  • Linux