2010-08-10 2 views
0

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

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

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

Спасибо!

Джек

EDIT: У меня есть новый (относящийся) вопрос: Я хотел бы выделить строку с помощью highlight_string(). Однако я не могу заставить его работать должным образом. I думаю Я понимаю, почему, но я не слишком уверен, как я могу это исправить.

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, и там определенно выделяются цвета, указанные там.

ответ

3

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

+0

Отлично, спасибо! Я также добавил дополнительный бит к вопросу ... :) – Jack

+0

@Jack 'highlight_string()' не будет работать, потому что вы находитесь в блоках 'pre' и' code'. Они не поддерживают форматирование HTML. –

+0

Я изменил функцию Code(), чтобы прочитать следующее: 'return '.nl2br (htmlspecialchars (highlight_string ($ code)))." ";' - к сожалению, он все еще не работает. Я также попытался «перетасовать» глубину функции 'highlight_string()' (например, поставив ее спереди), но не повезло. Также есть необычные «1», см. Скриншот: http://cl.ly/603f491d7402e06125be - они определенно не находятся в данных базы данных. – Jack

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