Форматирование HTML-кода для вывода в виде обычного текста с помощью PHP

У меня есть эта функция, которая берет некоторый отправленный пользователем HTML-код из базы данных:

function Code($code)
{
    return "<pre><code>".nl2br(htmlspecialchars($code))."</code></pre>";
}

Я буду называть это просто echo code($query->row('html'));. Я знаю, что моему вопросу не хватает глубины, но лучше ли это сделать? Или выводимое форматирование могло быть проанализировано (например, инъекции Javascript) или выводилось некорректно на некоторых машинах и т. Д.?

Спасибо!

Джек

РЕДАКТИРОВАТЬ: у меня есть новый (связанный) вопрос: я хотел бы выделить строку с помощью highlight_string(). Однако я не могу заставить его работать должным образом. Я думаю, что понимаю почему, но не уверен, как это исправить.

function Code($code)
{
    return "<pre><code>".highlight_string(nl2br(htmlspecialchars($code)))."</code></pre>";
}

Как видно из этого, я использую highlight_string() для всего этого. однако вывод вообще не выделяется, вместо этого он выводится как символьные сущности (&lt;, '›' и т. д.). Если я изменю порядок функций на что-то вроде:

return "<pre><code>".nl2br(htmlspecialchars(highlight_string($code)))."</code></pre>";

Я обнаружил, что объекты символов не выводятся, но строка по-прежнему не подсвечивается. Чтобы уточнить, у меня нет форматирования CSS, которое также повлияло бы на применяемый цвет текста. Кроме того, я проверил свои настройки PHP, и там определенно указаны цвета подсветки.


person Jack    schedule 10.08.2010    source источник


Ответы (1)


Нет, это нормально. htmlspecialchars() превратит любой управляющий символ HTML в его эквивалент сущности (< => &lt; и т. Д.), Здесь нет способа что-либо внедрить.

person Pekka    schedule 10.08.2010
comment
Отлично, спасибо! Я также добавил немного к вопросу ... :) - person Jack; 10.08.2010
comment
@Jack highlight_string() не сработает, потому что вы находитесь внутри блоков pre и code. Они не поддерживают форматирование HTML. - person Pekka; 10.08.2010
comment
Я изменил функцию Code (), чтобы она читалась так: return "".nl2br(htmlspecialchars(highlight_string($code))).""; - к сожалению, это все еще не работает. Я также пробовал «перетасовать» глубину функции highlight_string() (например, поместить ее спереди), но безуспешно. Также выводятся необычные единицы, см. Снимок экрана: cl.ly/603f491d7402e06125be - их точно нет в База данных данных. - person Jack; 10.08.2010
comment
@Jack функция highlight_string должна быть самой внешней, как в примере в вашем вопросе. - person Pekka; 10.08.2010
comment
Я действительно ценю помощь @Pekka, но когда я пытаюсь это сделать, это вывод: cl.ly/5df1ec7621b4d6984686 - снова , потом загадка "1" ... - person Jack; 10.08.2010
comment
@Jack Проверьте php.net/highlight_string, вам нужно установить для второго параметра highlight_string значение true. - person Pekka; 10.08.2010