PHP strip_tags() causando problemas com o conversor de quebra de linha?
-
26-12-2019 - |
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!
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 ''