2014-09-29 2 views
1

У меня возникла проблема с использованием библиотеки php HTMLPurifier. Я использую редактор WYSIWYG под названием «Summernote» для всех текстовых областей приложения.Сценарий, созданный после очистки в WYSIWYG

При написании что-то внутри sommernote как:

<script>alert('test');</script>

Сообщение данных приходит через, как

<p>&lt;script&gt;alert('test');&lt;/script&gt;</p>

Однако, как только это будет пробежал HTMLPurifier, он не удаляет теги сценария, которые преобразуются в обычные символы. Поэтому, когда я иду редактировать этот текст внутри summernote, он фактически запускает скрипт!

Вот образ того, что обрабатывается в редакторе:

HTML Purifier Issue

А вот как она хранится в базе данных:

HTML Purifier Issue - 2

Если у кого есть какие-либо идеи, пожалуйста, дайте я знаю!

EDIT: Кроме того, если я отключу редактор Summernote WYSIWYG, теги будут удалены из текстового поля при очистке с помощью HTMLPurifier.

ответ

5

Я подозреваю, что основная проблема здесь является распространенной ошибкой:

Когда вы выводите очищенный HTML в ваш WYSIWYG, вам нужно использовать htmlspecialchars() на нем. Таким образом, вместо того, чтобы это в исходном коде страницы оказанной ...

<textarea ...> 
    <p>&lt;script&gt;alert('test');&lt;/script&gt;</p> 
</textarea> 

... Вы должны иметь это:

<textarea ...> 
    &lt;p&gt;&amp;lt;script&amp;gt;alert('test');&amp;lt;/script&amp;gt;&lt;/p&gt; 
</textarea> 

Тогда WYSIWYG должен функционировать, как и ожидалось. (Если это не так, Эдвард на самом деле прав - вы должны посмотреть в другой редактор.)

Причина, по которой это правильный способ, состоит в том, что вы хотите, чтобы текст содержал текст в вашем текстовом поле, а не в формате HTML. Это проще всего понять, если вы рассматриваете сценарий без HTML Purifier, а кто-то вводит тег </textarea>, за которым следуют другие теги. Они вырвались из <textarea>, WYSIWYG или нет. Таким образом, вы помещаете htmlspecialchars() вокруг того, что вы выводите, что, как предполагается, является текстом в текстовом поле. Тот факт, что он напрямую связан с тегами HTML, является совпадением - он довольно вводит в заблуждение, вероятно, было бы лучше, если бы это не сработало, но большинство браузеров все равно будут показывать HTML-теги, как если бы они имели, если вы не сделай это.

После того как текст правильно экранирован, затем может войти в WYSIWYG, чтобы взять текст и интерпретировать его как HTML.

См., Если htmlspecialchars() исправляет вашу проблему. Он должен сделать это, без, вызывая побочные эффекты, даже если это может показаться вам интуитивно понятным.

(Конечно, если вы уже используете htmlspecialchars(), как описано, то я боюсь, что я не есть идея для левой руки.)

+0

Это был вопрос (с помощью 'htmlspecialchars()' на выходе в редактор), я полностью забыл об этой функции. Благодаря тонну! –

+0

Сладкий. Рад, что вы его исправили! :) – pinkgothic

 Смежные вопросы

  • Нет связанных вопросов^_^