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 ''