Уцененная PHP-разметка - вывод html

У меня есть редактор WMD на моем сайте, и я храню уценку в БД. Но прежде чем отправить разметку в базу данных, я отфильтрую ее с помощью mysql_real_escape_string, например:

$to_database = mysql_real_escape_string($_POST['markdown']);

И это нормально. Но теперь я хочу показать это, поэтому я использую PHP Markdown (который конвертирует markdown в html). Но проблема в том, что он показывает мне \ r \ n и \ n вместо новых строк. Я попробовал функцию nl2br, но это не помогло. Даже если я не экранирую вывод (не конвертирую markdown в html и не использую htmlpurifier), я все равно получаю \ n вместо новых строк. Только когда я удаляю mysql_real_escape_string, это выглядит хорошо.

bbbbbbbbbbb nnnnnnnnn

2 ответа

Решение

Они преобразуются и больше не действуют как разрывы строк. Вы хотите заменить их:

$markdown = str_replace('\r\n','<br/>',$_POST['markdown']);
$markdown = str_replace('\n','<br/>',$markdown);

Вы также можете сделать это:

$markdown = html_entity_decode($markdown);

Возможно, что-то сидит на входном слое и экранирует входящие символы с помощью обратной косой черты, поэтому при использовании mysql_real_escape_string вы на самом деле получаете двойной экранированный контент.

Если вам не повезло, это может быть magic_quotes_gpc в этом случае вы должны избавиться от этого как можно скорее, или если вы действительно не можете, то обойти это.

Другие вопросы по тегам