PHP strip_tags() вызывает проблемы с переводом строки-конвертер?

Я создаю публичный форум с нуля, и я хорошо настраиваюсь, и проверяю все сейчас. В настоящее время я застрял в функции, которая удаляет все html-теги, ожидают тех, которые я использую для вставки видео на YouTube, и тегов, выделенных полужирным шрифтом / курсивом, чтобы у пользователя по крайней мере был какой-то стиль оформления своих сообщений. Моя проблема в том, что когда я использую функцию nl2br2() для фильтрации своей пост-строки, она не удаляет html-теги из строки, она работает нормально, если я удаляю nl2br2() ..? Моя теория заключается в том, что функция strip_tags() также удаляет нативные системные разрывы строк \n и \r, так что nl2br2() не имеет прерванного перевода строки. Я действительно уверен, что это проблема! Как я могу заставить эти две функции работать вместе? Есть ли альтернатива strip_tags()? Или вы можете как-то сказать функции, чтобы прекратить удаление этих разрывов строки? Это действительно раздражает, тратил много часов сегодня, пытаясь выяснить это:D любая помощь сильно преувеличена!

ЭТО НЕ РАБОТАЕТ:

function nl2br2($string) { 
   $string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string); 
   return $string; 
} 


        $str = "$_POST[indlaeg]";
        mysql_real_escape_string($str); // PROTECT FROM SQL INJECTIONS THROUGH SINGLE QUOTES ''
        strip_tags($str, '<b><i><a><video><br>'); // REMOVE ALL TAGS EXPECT
        $str = nl2br2($str); // CONVERT LINE BREAKS TO <br>

ЭТО НЕ РАБОТАЕТ

$str = mysql_real_escape_string(strip_tags(nl2br2($_POST['indlaeg']), '<b><i><a><video><br>'));

ЭТО РАБОТАЛО!!!!

  function html2txt($document){ 
  $search = array('@<script[^>]*?>.*?</script>@si',  // Strip out javascript 
           '@<[\/\!]*?[^<>]*?>@si',            // Strip out HTML tags 
           '@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly 
           '@<![\s\S]*?--[ \t\n\r]*>@'         // Strip multi-line comments including     CDATA ); 
  $text = preg_replace($search, '', $document); 
  return $text; 
  }

$str = "$_POST[indlaeg]";
$str = html2txt($str);
$str = nl2br2($str);

Функция html2txt() отправлена ​​с небес! Он лишает ВСЕХ злобных меток! Включая одинарные кавычки, которые хакеры любят использовать для SQL-инъекций:D

ЗАДАЧА РЕШЕНА!

1 ответ

Решение

Вы применяете три функции к вашей строке - mysql_real_escape_string, strip_tags а также nl2br2, Порядок должен быть обратным, потому что mysql_real_escape_string добавляет обратную косую черту перед \n а также \r, что делает строку не может быть обработана nl2br2, Если вы подаете заявку nl2br2 первый, strip_tags следующий и mysql_real_escape_string наконец, таких проблем быть не должно.

Замените эти четыре строки

$str = "$_POST[indlaeg]";
mysql_real_escape_string($str); // PROTECT FROM SQL INJECTIONS THROUGH SINGLE QUOTES ''
strip_tags($str, '<b><i><a><video><br>'); // REMOVE ALL TAGS EXPECT
$str = nl2br2($str); // CONVERT LINE BREAKS TO <br>

с

$str = $_POST['indlaeg'];
$str = nl2br2($str); // CONVERT LINE BREAKS TO <br>
$str = strip_tags($str, '<b><i><a><video><br>'); // REMOVE ALL TAGS EXCEPT A FEW
$str = mysql_real_escape_string($str); // PROTECT FROM SQL INJECTIONS THROUGH SINGLE QUOTES ''
Другие вопросы по тегам