Как работать с кодом, сгенерированным wysiwyg?

Я хочу использовать тот же редактор, что и SO на моем сайте, пользователь также должен иметь возможность вводить код, который хранится в базе данных. Но что-то я не понимаю:

Как отличить теги разметки (p, strong, li) от кода, который должен отображаться как код, а не интерпретироваться браузером?

Когда я сохраняю отправленные данные в базе данных, я вызываю функцию htmlentities, и это повлияет на каждый тег: разметку, сгенерированную с помощью редактора wmd, а также html-код (или другой язык), размещенный пользователем.

Любая информация об этом, пожалуйста? Я действительно понятия не имею, как это сделать.


person Community    schedule 11.03.2011    source источник
comment
StackOverflow использует символ обратной кавычки или теги <pre>, чтобы код, который следует интерпретировать как код, интерпретировался как код. (обратная галочка — это клавиша под esc на обычных клавиатурах (британская раскладка)). Однако у меня нет никаких идей, кроме этого, поэтому это комментарий, а не ответ ;-)   -  person Bojangles    schedule 11.03.2011


Ответы (1)


Почему вы вызываете функцию htmlentities, когда сохраняете ее в базе данных?

Это то, что нарушает вашу уценку. Я имею в виду разметку. Точнее, оба.

person Zed    schedule 11.03.2011
comment
Как мне обращаться с кодом после того, как я вытащу его из БД? Помня о безопасности и т. д. ? - person ; 11.03.2011
comment
После того, как вы обработаете его с помощью Markdown, вы должны очистить его, сохранив только те теги HTML, которые вы хотите разрешить использовать, или закодировать объекты html, прежде чем отображать его как HTML, если вы хотите отобразить исходный код HTML. Нет смысла кодировать в html все, что входит в базу данных. Единственный случай, когда это полезно, — это когда вы отображаете данные буквально в HTML. - person Zed; 11.03.2011
comment
Я вижу, у меня тогда было что-то совершенно неправильное в голове. Любая информация о том, как я должен отличать теги, которые я хочу, и кодировать от других? Зная об этом... - person ; 11.03.2011
comment
Google для очистки HTML, на эту тему есть много ресурсов. Как правило, когда вы помещаете данные в базу данных, вы должны сначала беспокоиться о SQL-инъекциях (если это база данных SQL), вы также можете дезинфицировать свою уценку и / или разметку перед ее сохранением, но вам всегда нужно дезинфицировать или html-кодируйте все, что вы собираетесь включить в веб-страницу, чтобы избежать межсайтового скриптинга и подобных уязвимостей. - person Zed; 11.03.2011