удалить html символы php
Как удалить специальные символы html?
Скажите, пожалуйста, любую функцию, которую я могу использовать, чтобы удалить эти специальные символы кода из моей строки.
Либо декодируйте их, используя html_entity_decode либо удалите их с помощью preg_replace :
EDIT: Альтернатива в соответствии с комментарием Jacco
может быть приятно заменить «+» на <2,8>или что-то в этом роде. Это ограничит возможность замены целых предложений, когда присутствует незашифрованное «&».
Используйте html_entity_decode для преобразования объектов HTML.
Вам нужно будет установить кодировку, чтобы она работала правильно.
В дополнение к хорошим ответам выше, PHP также имеет встроенную функцию фильтра, которая весьма полезна: filter-var.
Чтобы удалить символы HMTL, используйте:
$cleanString = filter_var($dirtyString, FILTER_SANITIZE_STRING);
Больше информации:
Вы можете взглянуть на htmlentities () и html_entity_decode () здесь
Это может сработать для удаления специальных символов.
Обычная ванильная струна способ сделать это без привлечения двигателя regx preg:
Похоже, что вы действительно хотите:
Он заменяет именованные объекты их эквивалентом числа.
Функция, которую я использовал для выполнения задачи, присоединяюсь к обновлению, сделанному schnaader:
Эта функция удаляет каждый html-тег и html-символ, преобразованный в UTF-8, готовый к сохранению в MySQL
strip_tags
(PHP 4, PHP 5, PHP 7, PHP 8)
strip_tags — Удаляет теги HTML и PHP из строки
Описание
Список параметров
Второй необязательный параметр может быть использован для указания тегов, которые не нужно удалять. Они указываются как строка ( string ) или как массив ( array ) с PHP 7.4.0. Смотрите пример ниже относительно формата этого параметра.
Возвращаемые значения
Возвращает строку без тегов.
Список изменений
Версия | Описание |
---|---|
8.0.0 | allowed_tags теперь допускает значение null. |
7.4.0 | allowed_tags теперь альтернативно принимает массив ( array ). |
Примеры
Пример #1 Пример использования strip_tags()
// Начиная с PHP 7.4.0, строка выше может быть записана как:
// echo strip_tags($text, [‘p’, ‘a’]);
?>
Результат выполнения данного примера:
Примечания
Эта функция не должна использоваться для предотвращения XSS-атак. Используйте более подходящие функции для этой задачи, такие как htmlspecialchars() или другие механизмы, в зависимости от контекста вывода.
Из-за того, что strip_tags() не проверяет валидность HTML, то частичные или сломанные теги могут послужить удалением большего количества текста или данных, чем ожидалось.
Смотрите также
User Contributed Notes 17 notes
Hi. I made a function that removes the HTML tags along with their contents:
Result for strip_tags($text):
sample text with tags
Result for strip_tags_content($text):
text with
Result for strip_tags_content($text, ‘‘):
sample text with
Result for strip_tags_content($text, ‘‘, TRUE);
text with
I hope that someone is useful 🙂
After upgrading from v7.3.3 to v7.3.7 it appears nested «php tags» inside a string are no longer being stripped correctly by strip_tags().
This is still working in v7.3.3, v7.2 & v7.1. I’ve added a simple test below.
A word of caution. strip_tags() can actually be used for input validation as long as you remove ANY tag. As soon as you accept a single tag (2nd parameter), you are opening up a security hole such as this:
Plus: regexing away attributes or code block is really not the right solution. For effective input validation when using strip_tags() with even a single tag accepted, http://htmlpurifier.org/ is the way to go.
Since strip_tags does not remove attributes and thus creates a potential XSS security hole, here is a small function I wrote to allow only specific tags with specific attributes and strip all other tags and attributes.
If you only allow formatting tags such as b, i, and p, and styling attributes such as class, id and style, this will strip all javascript including event triggers in formatting tags.
Note that allowing anchor tags or href attributes opens another potential security hole that this solution won’t protect against. You’ll need more comprehensive protection if you plan to allow links in your text.
a HTML code like this:
$str = ‘color is bluesize is huge
material is wood’;
$str = ‘color is blue size is huge material is wood’;
«5.3.4 strip_tags() no longer strips self-closing XHTML tags unless the self-closing XHTML tag is also given in allowable_tags.»
This is poorly worded.
The above seems to be saying that, since 5.3.4, if you don’t specify «
» in allowable_tags then «
» will not be stripped. but that’s not actually what they’re trying to say.
What it means is, in versions prior to 5.3.4, it «strips self-closing XHTML tags unless the self-closing XHTML tag is also given in allowable_tags», and that since 5.3.4 this is no longer the case.
So what reads as «no longer strips self-closing tags (unless the self-closing XHTML tag is also given in allowable_tags)» is actually saying «no longer (strips self-closing tags unless the self-closing XHTML tag is also given in allowable_tags)».
pre-5.3.4: strip_tags(‘Hello World
‘,’
‘) => ‘Hello World
‘ // strips
because it wasn’t explicitly specified in allowable_tags
5.3.4 and later: strip_tags(‘Hello World
‘ // does not strip
because PHP matches it with
in allowable_tags
Note the different outputs from different versions of the same tag:
Features:
* allowable tags (as in strip_tags),
* optional stripping attributes of the allowable tags,
* optional comment preserving,
* deleting broken and unclosed tags and comments,
* optional callback function call for every piece processed allowing for flexible replacements.
Caution: the function doesn’t fully validate tags (the more so HTML itself), it just force strips those obviously broken (in addition to stripping forbidden tags). If you want to get valid tags then use strip_attrs option, though it doesn’t guarantee tags are balanced or used in the appropriate context. For complex logic consider using DOM parser.
Here is a recursive function for strip_tags like the one showed in the stripslashes manual page.
Как с помощью PHP удалить символ – все способы реализации
Дата публикации: 2017-05-19
От автора: может, слов не выкинешь из песни. Но вот в PHP удалить символ проще простого. Сегодня этим и займемся.
Функциональный подход
Имеется в виду использование встроенных в ядро языка функций. Сначала используем str_replace(). Она принимает три аргумента: символ замены, заменяемый символ и исходную строку. Пример:
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Но это не единственная функция для изъятия «нежелательного» элемента из строки. Вот еще одна:
Здесь для удаления определенных частей текста применяем функцию substr(). В качестве параметров передаем ей первоначальную строку, положение, с которого нужно отсечь строку, и положение последнего знака возвращаемой подстроки.
Использование данной функции оправдано, если знаете очередность символа, который нужно изъять.
Вот еще одна функция, помогающая в решении проблемы. strstr() возвращает часть строки до или после переданного ей символа. Как от него избавиться:
Для этого в параметрах функции указываем true и получаем левую часть строки от символа, но уже без него.
Регулярки, потому что регулярно
Как всегда, господа, «на второе» у нас регулярные выражения. Их использование крайне удобно для решения некоторых «неудобных» ситуаций. К примеру, если нужно избавиться от повторяющихся знаков:
Здесь применяется функция для работы с регулярками preg_replace(). В переданной ей строке она ищет заданный символ и меняет его на другой. В приведенном выше примере таким образом мы избавились от нулей в тексте.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Разработка веб-приложения на PHP
Создайте веб-приложение на PHP на примере приема платежей на сайте
htmlspecialchars — Преобразует специальные символы в HTML-сущности
Описание
Список параметров
Битовая маска из нижеуказанных флагов, определяющих режим обработки кавычек, некорректных кодовых последовательностей и используемый тип документа. По умолчанию используется ENT_COMPAT | ENT_HTML401.
Название константы | Описание |
---|---|
ENT_COMPAT | Преобразует двойные кавычки, одинарные кавычки не изменяются. |
ENT_QUOTES | Преобразует как двойные, так и одинарные кавычки. |
ENT_NOQUOTES | Оставляет без изменения как двойные, так и одинарные кавычки. |
ENT_IGNORE | Без всяких уведомительных сообщений отбрасывает некорректные кодовые последовательности вместо возврата пустой строки. Использование этого флага не рекомендуется, так как это может привести к » негативным последствиям, связанным с безопасностью. |
ENT_SUBSTITUTE | Заменяет некорреткные кодовые последовательности символом замены Юникода U+FFFD в случае использования UTF-8 и &#FFFD; при использовании другой кодировки, вместо возврата пустой строки. |
ENT_DISALLOWED | Заменяет неверные коды символов для заданного типа документа символом замены юникода U+FFFD (UTF-8) или &#FFFD; (при использовании другой кодировки) вместо того, чтобы оставлять все как есть. Это может быть полезно, например, для того, чтобы убедиться в формальной правильности XML-документов со встроенным внешним контентом. |
ENT_HTML401 | Обработка кода в соответствии с HTML 4.01. |
ENT_XML1 | Обработка кода в соответствии с XML 1. |
ENT_XHTML | Обработка кода в соответствии с XHTML. |
ENT_HTML5 | Обработка кода в соответствии с HTML 5. |
Необязательный аргумент определяющий кодировку, используемую при конвертации симоволов.
Если не указан, то значением по умолчанию для encoding зависит от используемой версии PHP. В PHP 5.6 и старше, для значения по умолчанию используется конфигурационная опция default_charset. В PHP 5.4 и 5.5 используется UTF-8 по умолчанию. Более ранние версии PHP используют ISO-8859-1.
Хотя этот аргумент является технически необязательным, настоятельно рекомендуется указать правильное значение для вашего кода, если вы используете PHP 5.5 или выше, или если ваша опция конфигурации default_charset может быть задана неверно для входных данных.
Поддерживаются следующие кодировки:
Кодировка | Псевдонимы | Описание |
---|---|---|
ISO-8859-1 | ISO8859-1 | Западно-европейская Latin-1. |
ISO-8859-5 | ISO8859-5 | Редко используемая кириллическая кодировка (Latin/Cyrillic). |
ISO-8859-15 | ISO8859-15 | Западно-европейская Latin-9. Добавляет знак евро, французские и финские буквы к кодировке Latin-1(ISO-8859-1). |
UTF-8 | 8-битная Unicode, совместимая с ASCII. | |
cp866 | ibm866, 866 | Кириллическая кодировка, применяемая в DOS. |
cp1251 | Windows-1251, win-1251, 1251 | Кириллическая кодировка, применяемая в Windows. |
cp1252 | Windows-1252, 1252 | Западно-европейская кодировка, применяемая в Windows. |
KOI8-R | koi8-ru, koi8r | Русская кодировка. |
BIG5 | 950 | Традиционный китайский, применяется в основном на Тайване. |
GB2312 | 936 | Упрощенный китайский, стандартная национальная кодировка. |
BIG5-HKSCS | Расширенная Big5, применяемая в Гонг-Конге. | |
Shift_JIS | SJIS, SJIS-win, cp932, 932 | Японская кодировка. |
EUC-JP | EUCJP, eucJP-win | Японская кодировка. |
MacRoman | Кодировка, используемая в Mac OS. | |
» | Пустая строка активирует режим определения кодировки из файла скрипта (Zend multibyte), default_charset и текущей локали (см. nl_langinfo() и setlocale() ), в указанном порядке. Не рекомендуется к использованию. |
Замечание: Остальные кодировки не поддерживаются, вместо них будет применена кодировка по умолчанию и сгенерировано предупреждение.
Если параметр double_encode выключен, то PHP не будет преобразовывать существующие html-сущности. По умолчанию преобразуется все без ограничений.
Возвращаемые значения
Список изменений
Примеры
Пример #1 Пример использования htmlspecialchars()
Примечания
Смотрите также
How to remove html special chars?
Please tell me any function which I can use to remove these special code chars from my string.
15 Answers 15
Either decode them using html_entity_decode or remove them using preg_replace :
EDIT: Alternative according to Jacco’s comment
might be nice to replace the ‘+’ with <2,8>or something. This will limit the chance of replacing entire sentences when an unencoded ‘&’ is present.
Use html_entity_decode to convert HTML entities.
You’ll need to set charset to make it work correctly.
In addition to the good answers above, PHP also has a built-in filter function that is quite useful: filter-var.
To remove HMTL characters, use:
$cleanString = filter_var($dirtyString, FILTER_SANITIZE_STRING);
More info:
You may want take a look at htmlentities() and html_entity_decode() here
This might work well to remove special characters.
A plain vanilla strings way to do it without engaging the preg regex engine:
If you want to convert the HTML special characters and not just remove them as well as strip things down and prepare for plain text this was the solution that worked for me.
html_entity_decode w/ ENT_QUOTES | ENT_XML1 converts things like ‘ htmlspecialchars_decode converts things like & html_entity_decode converts things like ‘ and strip_tags removes any HTML tags left over.