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

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

Ответы [ 5 ]

8 голосов
/ 14 октября 2008

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

$txt = strip_tags($txt, '<p><a><br>');
1 голос
/ 15 октября 2008

И TinyMCE, и FCK имеют множество вариантов конфигурации. Документация может быть трудной для поиска, но стоит усилий.

TinyMCE позволяет вам указать кодировку объекта, используя опцию entity_encoding. Это можно указать при создании вашего редактора. Это может выглядеть примерно так ...

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

Это изменит тег как & rsquo; в '.

1 голос
/ 14 октября 2008

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

Но TinyMCE имеет несколько настроек для кодирования объектов. Я бы посоветовал вам проверить параметры конфигурации entity_encoding , entity и encoding в руководстве TinyMCE.

1 голос
/ 14 октября 2008

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

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

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


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

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

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

Э-э, у меня нет ответа.

1 голос
/ 14 октября 2008

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

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

...