Есть ли способ декодирования html-сущностей, оставив <br /,> <p> и т. д., Используя PHP?

Я использую tinyMCE в качестве текстового редактора на своем сайте и хочу переформатировать текст перед сохранением его в своей базе данных (заменив теги & rsquo; на ', затем на'). Я не могу найти простой способ сделать это с помощью tinyMCe, а использование htmlentities () меняет все, включая <>. Есть идеи?

Ах, после исправления форматирования вопрос стал более понятным!

Marcus Downing 14.10.2008 17:44

Не могли бы вы пояснить цель этого переформатирования? Это для безопасности (т.е. для предотвращения внедрения XSS или SQL)?

Barry Austin 14.10.2008 18:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
3 065
5

Ответы 5

Вы можете использовать strip_tags($str, $allowed_tags), как показано ниже:

$txt = strip_tags($txt, '<p><a><br>');

Непосредственно из руководства по PHP: strip_tags ()

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

tinyMCE позволяет указать «белый список» разрешенных тегов, который удалит все теги, не включенные в список:

tinyMCE.init({
  ...  //  other init instructions
  valid_elements: 'p,a[href],br',
});

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


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

В нашем собственном проекте эту работу выполняет внутренний преобразователь, который мы используем. При преобразовании из HTML в наше внутреннее представление закодированные символы преобразуются в сами символы; при обратном преобразовании в HTML кодируются высшие символы. Это делается посимвольно, как в синтаксическом анализаторе. Однако этот подход, вероятно, слишком сложен для ваших нужд.

Многие используют ярлык для использования ряда регулярных выражений, но вам может быть сложно организовать ваши регулярные выражения таким образом, чтобы сохранить амперсанды & и точки с запятой ; одновременно с преобразованием символьных сущностей &nbsp;. Вы также обнаружите, что для охвата всех возможных символьных сущностей вам потребуются десятки регулярных выражений.

У меня нет ответа.

Это зависит от тегов, которые вы хотите сохранить. Я предполагаю, что вы хотите использовать все функции TinyMCE, чтобы текст мог включать в себя связанные теги, такие как конструкции таблиц. Тогда нет простого способа сделать это (один из способов - использовать Объектная модель документа PHP для анализа html-документа.

Но у TinyMCE есть несколько параметров конфигурация для кодирования сущностей. Я предлагаю вам проверить параметры конфигурации entity_encoding, сущности и кодирование в руководстве TinyMCE.

И TinyMCE, и FCK имеют множество вариантов конфигурации. Поиск документации может оказаться трудным, но затраченные усилия того стоят.

TinyMCE позволяет указывать кодировку сущности с помощью параметра entity_encoding. Его можно указать при создании редактора. Это может выглядеть примерно так ...

tinyMCE.init ({
    entity_encoding: 'numeric'
});

Это изменит тег, например & rsquo; в & # 39 ;.

Другие вопросы по теме