РНР продезинфицировать уценки - вывод HTML


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

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

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

Бббббббббб нннннннн

2 2

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, и в этом случае вы должны избавиться от нее как можно скорее, или если вы действительно не можете, то обойти ее.