Pergunta

Estou construindo um fórum público do zero e estou ajustando e testando tudo agora.No momento, estou preso na função que remove todas as tags html, exceto aquelas que eu uso para inserir vídeos do YouTube e tags em negrito/itálico, para que o usuário, pelo menos, tenha alguma maneira de estilizar suas postagens.Meu problema é que quando eu uso a função nl2br2() para filtrar minha pós-string, ela não remove as tags html da string, funciona bem se eu remover nl2br2() ..?Minha teoria é que a função strip_tags() também remove as quebras de linha do sistema nativo e , de modo que nl2br2() não tenha nenhuma quebra de linha para converter.Na verdade, tenho certeza, esse é o problema!Como posso fazer essas duas funções funcionarem juntas?Existe alguma alternativa para strip_tags()?Ou você pode de alguma forma dizer à função para parar de remover essas quebras de linha!!?É realmente chato, passei muitas horas hoje tentando descobrir isso: D qualquer ajuda é muito apreciada!

ISSO NÃO FUNCIONOU:

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>

ISSO TAMBÉM NÃO FUNCIONOU:

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

ISSO FUNCIONOU!!!!

  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);

A função html2txt() foi enviada do céu!Ele remove TODAS as tags mal-intencionadas!Incluindo as aspas simples '' que os hackers gostam de usar para injeção de SQL:D

PROBLEMA RESOLVIDO!

Foi útil?

Solução

Você está aplicando três funções à sua string – mysql_real_escape_string, strip_tags e nl2br2.A ordem deve ser invertida porque mysql_real_escape_string adiciona uma barra invertida antes \n e \r, tornando a string incapaz de ser processada por nl2br2.Se você se inscrever nl2br2 primeiro, strip_tags próximo e mysql_real_escape_string por último, tais problemas não deverão surgir.

Substitua estas quatro linhas

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

com

$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 ''
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top