2012-06-25 4 views
0

Это довольно просто, у меня есть область текст сообщения на моем сайте, и если я вход:nl2br() не будет выводить разрывы строк, просто «п»

line 1 
line 2 
line 3 

в него, он выводит:

line 1nline 2nline 3 

Мой код вставки:

$status = strip_tags(stripslashes(htmlentities(mysql_real_escape_string($_POST['status'])))); 
    $uid = strip_tags(stripslashes(htmlentities(mysql_real_escape_string($_POST['uid'])))); 

    //more stuff 

     $sid = rndTxt(16); 
     $status = nl2br($status); 
     if (!get_magic_quotes_gpc()) { 
      $status = addslashes($status); 
     } 


    $insert = mysql_query("INSERT INTO mingle_status (uid,sid,status,`timestamp`) VALUES ('$uid','$sid','$status',now())") or 
    print mysql_error(); 

и мой выходной код:

while($st = mysql_fetch_assoc($statussql)) { 
    $status = stripslashes($st['status']); 
    $sid = $st['sid']; 
    $td = $st['timestamp']; 
?> 
<div id="n"> 
<div id="statuses" class="<?php echo $sid; ?>"> 
<p><?php echo $status; ?></p> 
<div id="statuscomadd" style="background:#E0E0E0;"> 
<a href="ld.php?uid=<?php $uid; ?>&pid=<?php echo $sid;?>&method=like">Like</a> <a href="ld.php?uid=<?php $uid; ?>&pid=<?php echo $sid;?>&method=dislike">Dislike</a><a href="#" id="time"><?php echo time_since($td) . " ago"; ?></a> 
</div> 
</div> 

Любая помощь будет принята с благодарностью! :)

+0

это некоторые комбо там у вас:. 'Strip_tags (stripslashes (htmlentities (mysql_real_escape_string (', в качестве общего руководства, вы звоните 'mysql_real_escape_string' при вставке вещи в БД, и' htmlentities' только тогда, когда выводит HTML –

+0

вас 'll хотят использовать 'mysql_real_escape_string' для экранирования вашего ввода - addslashes не будет вырезать его – Mikey

+0

Возможно, используйте' nl2br() 'перед тем, как вы будете' stripslashes() 'и все остальное, что происходит в первых двух строках в приведенном выше коде , – Havelock

ответ

2

вам не нужно использовать nl2br() на вставке, вы должны будете использовать его во время отображения в HTML

и придется удалить stripslashes перед тем вставкой

0

Вы используете strip_tags(stripslashes(htmlentities(mysql_real_escape_string())));, который удаляет косые черты от \n.

Просто используйте mysql_real_escape_string(), или htmlentities(,ENT_QUOTES) для HTML.

Кроме того, если возможно использование кодировки UTF-8 и htmlspecialchars() вместо htmlentities(). htmlentities() преобразует каждый символ, который имеет HTML-представление, а htmlspecialchars() преобразует только необходимые символы. Нет необходимости конвертировать все. См.: htmlentities vs htmlspecialchars

+0

Почему 'htmlentities()' вместо 'htmlspecialchars()'? – PeeHaa

+0

Поскольку вопрос не указывал используемую кодировку, а htmlentities работает с большим количеством кодировок, чем htmlspecialchars. – ONOZ

+0

С каких это пор? А какая кодировка не поддерживается 'htmlspecialchars()'? – PeeHaa

1

При вставке просто выполните mysql_real_escape_string() над значениями. Вы хотите изменить данные (например, используя htmlentities(), когда вы собираетесь отображать его).

Также обратите внимание на прекращение использования mysql_* функций для нового кода. Они больше не поддерживаются, и сообщество начинает работу deprecation process. См. red box? Вместо этого вы должны узнать о prepared statements и использовать либо PDO, либо MySQLi. Если вы не можете решить, this article поможет выбрать. Если вы хотите узнать, here is a good PDO tutorial.

Другое дело: вам действительно нужно htmlentities()? Потому что imo лучшим решением является использование htmlspecialchars(). В противном случае все Объекты html будут заменены.

Кроме того, я не думаю, что вам нужно использовать strip_tags(), потому что вы уже делаете htmlspecialchars(), чтобы защитить вас от XSS.

Теперь у вас проблема, потому что вы используете stripslashes(), который разбивает линейные разрывы \n. Я думаю, вы можете просто отказаться от этих add/stripslashes.

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