- strip_tags
- Parameters
- Return Values
- Changelog
- Examples
- Notes
- See Also
- strip_tags
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Примечания
- Смотрите также
- Regex to remove an HTML tag and its content from PHP string
- Example
- How to retain only specified tags
- Example
- Lorem Ipsum
- How to remove certain tags with all their content
- Example
- Example
- Related Articles
- Как в php удалить из строки определенные теги? Функция strip_tags удалет все кроме определенных. А мне нужно только определенные. Как это сделать?
strip_tags
Эта функция пытается вернуть строку со всеми байтами NULL, тегами HTML и PHP, удаленными из данной string . Он использует тот же конечный автомат удаления тегов, что и функция fgetss () .
Parameters
Вы можете использовать необязательный второй параметр,чтобы указать теги,которые не должны быть вычеркнуты.Они задаются либо как строка,либо,начиная с версии PHP 7.4.0,как массив.Формат этого параметра приведен в примере ниже.
Note:
Комментарии HTML и теги PHP также удаляются. Это жестко запрограммировано и не может быть изменено с помощью allowed_tags .
Note:
Самозакрывающиеся теги XHTML игнорируются, и в allowed_tags следует использовать только несамозакрывающиеся теги . Например, чтобы разрешить как
,так и
, вы должны использовать:
Return Values
Возвращает ободранную строку.
Changelog
Version | Description |
---|---|
8.0.0 | allowed_tags теперь имеет значение NULL. |
7.4.0 | Параметр allowed_tags теперь альтернативно принимает массив. |
Examples
Пример # 1 strip_tags () Пример
$text = 'Test paragraph.
Other text'; echo strip_tags($text); echo "\n"; // Allow and echo strip_tags($text, ''
); // as of PHP 7.4.0 the line above can be written as: // echo strip_tags($text, ['p', 'a']); ?>
Выводится приведенный выше пример:
Test paragraph. Other text p>Test paragraph. p> a href="#fragment">Other text a>
Notes
Эту функцию не следует использовать для предотвращения атак XSS. Используйте более подходящие функции, такие как htmlspecialchars () или другие средства, в зависимости от контекста вывода.
Поскольку strip_tags () фактически не проверяет HTML, частичные или неработающие теги могут привести к удалению большего количества текста / данных, чем ожидалось.
Эта функция не изменяет никаких атрибутов тегов, которые вы разрешаете использовать allowed_tags , включая атрибуты style и onmouseover , которыми может злоупотребить озорной пользователь при публикации текста, который будет показан другим пользователям.
Note:
Имена тегов во входном HTML, длина которых превышает 1023 байта, будут обрабатываться как недопустимые, независимо от параметра allowed_tags .
See Also
PHP 8.2
(PHP 4,5,7,8)strftime Форматирование локального времени/даты в соответствии с настройками локали Эта функция была ОПРЕДЕЛЕНА в PHP 8.1.0.
(PHP 4,5,7,8)stripcslashes Снятие кавычек со строки,процитированной с помощью addcslashes()Возвращает строку со снятыми обратными слешами.
(PHP 5,7,8)stripos Найти позицию первого вхождения нечувствительной к регистру подстроки Найти числовую позицию первого вхождения иголки haystack
strip_tags
Эта функция пытается возвратить строку str , из которой удалены все NULL-байты, HTML и PHP теги. Для удаления тегов используется тот же автомат, что и в функции fgetss() .
Список параметров
Второй необязательный параметр может быть использован для указания тегов, которые не нужно удалять.
Замечание:
Комментарии HTML и PHP-теги также будут удалены. Это жестко записано в коде и не может быть изменено с помощью параметра allowable_tags .
Замечание:
Этот параметр не должен содержать пробелов. strip_tags() рассматривает тег как нечувствительную к регистру строку, находящуюся между и первым пробелом или >.
Замечание:
В PHP 5.3.4 и новее также необходимо добавлять соответвующий закрывающий тег XHTML, чтобы удалить тег из str . Например, для удаления и и
нужно сделать следующее:
Возвращаемые значения
Возвращает строку без тегов.
Список изменений
Версия | Описание |
---|---|
5.3.4 | strip_tags() больше не удаляет соответвующие закрывающие XHTML теги, если они не переданы в allowable_tags . |
5.0.0 | strip_tags() теперь безопасна для обработки бинарных данных. |
Примеры
Пример #1 Пример использования strip_tags()
Результат выполнения данного примера:
Примечания
Из-за того, что strip_tags() не проверяет валидность HTML, то частичные или сломанные теги могут послужить удалением большего количества текста или данных, чем ожидалось.
Эта функция не изменяет атрибуты тегов, разрешенных с помощью allowable_tags , включая такие атрибуты как style и onmouseover, которые могут быть использованы озорными пользователями при посылке текста, отображаемого также и другим пользователям.
Замечание:
Имена тегов в HTML превышающие 1023 байта будут рассматриваться как невалидные независимо от параметра allowable_tags .
Смотрите также
Regex to remove an HTML tag and its content from PHP string
We use the in-built PHP strip_tags() function to remove HTML, XML, and PHP tags from a PHP string.
Example
Lorem IpsumLorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec volutpat ligula.
"; echo strip_tags($mystring);
Lorem IpsumLorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec volutpat ligula.
As you can see, it removes all the HTML tags and their attributes but retains all the content of those tags.
How to retain only specified tags
The strip_tags() function allows for a second optional argument for specifying allowable tags to be spared when the rest HTML tags get stripped off. This way, you can retain some and remove all the other tags.
Example
Lorem IpsumLorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec volutpat ligula.
"; echo strip_tags($mystring,",
");
Lorem Ipsum
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec volutpat ligula.
As you can see the rest of the tags have been removed leaving the string with only the and
, which were specified in the second argument.
How to remove certain tags with all their content
As opposed to the above examples where only tags are removed but their content remains intact, let’s see how we can do away with specific tags together with their content.
To achieve this we use the PHP preg_replace() function.
The first argument is the regular expression(we specify the tag(s) that we want to remove or replace in it), the second is the match(this is what we replace the specified tag(s) with) and the third is the string in which we want to make changes to.
Replace the terms «tag» with the respective opening and closing tags you wish to remove and $str with your string. These tags in the string will get replaced with whatever you set as the second argument, in this case, removed since we have used empty quotes «» .
Example
Lorem IpsumLorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec volutpat ligula.
"; echo preg_replace('~~Usi', "", $mystring);
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec volutpat ligula.
We have removed the tag and its content as specified in the function.
If you would like to strip off multiple tags with their content at a go, you can specify them as an array of regular expressions in the first argument of the function.
Example
Lorem IpsumLorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec volutpat ligula.
"; echo preg_replace(array('~~Usi','~~Usi','~~Usi'), "", $mystring);
Lorem sit amet, adipiscing elit. Donec nec volutpat ligula.
We have specified an array of , and , all which together with their content have been striped off.
That’s all for this article.
Related Articles
Как в php удалить из строки определенные теги? Функция strip_tags удалет все кроме определенных. А мне нужно только определенные. Как это сделать?
Знаю, что регулярки — не лучший способ( https://stackoverflow.com/questions/11229831/regul. ). Думаю, что можно попробовать внести все существующие теги в массив. Потом найти расхождение у этого массива с массивом, в котором те теги, которые я хочу удалить. И потом применить strip_tags. Как вы думаете, хороший вариант? Вот бы только упростить как-нибудь создание массива со всеми тегами.
static public function create_dom($string = null) < $dom = new DOMDocument(); // ---------------------------------------------------------------- // Делается обертка в видедля $string. Это нужно, так как из-за LIBXML_HTML_NOIMPLIED теги могут выводиться несколько некорректно. Подробности по ссылке: // https://stackoverflow.com/questions/29493678/loadhtml-libxml-html-noimplied-on-an-html-fragment-generates-incorrect-tags // Также добавляется кодировка - так как без вместо текста, полученного от ckeditor, будут кракозябры. // ---------------------------------------------------------------- $dom->loadHTML('' . '' . $string . '', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); $container = $dom->getElementsByTagName('div')->item(0); $container = $container->parentNode->removeChild($container); while ($dom->firstChild) < $dom->removeChild($dom->firstChild); > while ($container->firstChild) < $dom->appendChild($container->firstChild); > return $dom; > static public function unwrap_tags($string, $tags) < $dom = static::create_dom($string); foreach ($dom->childNodes as $c) < if (in_array($c->tagName, $tags)) < // если просто добавить в $result $c->nodeValue, то не добавятся внутренние теги (
, например), ведь их нет в nodeValue. foreach ($c->childNodes as $cc) < $result .= $cc->ownerDocument->saveHTML($cc); > > else < $result .= $c->ownerDocument->saveHTML($c); > > return $result; > static public function prepare_text($text)