cg-auto 0 Denunciar post Postado Junho 2, 2009 Boa tarde galera.. Seguinte... To precisando de alguma função que substitua um conjunto de frases, palavras e/ou caracteres por outro pré definido. Um exemplo pra ficar mais claro: O usuário escreve no campo de enbtrada de uma mensagem, por exemplo <? echo "teste"; ?> e todo esse conjunto é substituido por "Desculpe, mas você não pode escrever funções PHP nessa área." Sei que pode ser feito isso com expressões regulares.. Mas não manjo nada.. Até tentei fazer algo com expressões usando ereg_replace, mas quase deu muito certo.. Se o usuário escrevesse: <? qualquer coisa ?> ele dava certo, mas o problema vinha quando o usuário colocasse 2 códigos, tipo Entrada: <? //qualquer coisa-1 ?> teste <? //qualquer coisa-2 ?> Saída obtida: "Desculpe, mas você não pode escrever funções PHP nessa área.". Saída esperada: "Desculpe, mas você não pode escrever funções PHP nessa área.". teste "Desculpe, mas você não pode escrever funções PHP nessa área.". Entenderam? Desde já deixo meu agradecimento. Grande abraço. Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Junho 2, 2009 http://br.php.net/str_replace Compartilhar este post Link para o post Compartilhar em outros sites
cg-auto 0 Denunciar post Postado Junho 2, 2009 http://br.php.net/str_replacebeleza André? Cara, valeu aí, mas não é isso que preciso... A situação é muito mais coplexa do que usar um simples str_replace(). Eu usaria str_replace se eu soubesse exatamente qual seria a entrada do usuário, mas não posso prever qual código ele vai escrever... Ele poderia entrar com um simples código, exemplo: <?php echo "teste"; ?> ou códigos complexos que envolveria alguma tentativa de burlar o sistema... É justamente evitar, então eu preciso de uma função que desativa qualquer entrada com as característica começo "<?" e final "?>". O que vem no meio eu não faria idéia! Entende? Grande abraço. Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Junho 2, 2009 Isso te ajudará: » Removendo TAGs HTML de textos Compartilhar este post Link para o post Compartilhar em outros sites
cg-auto 0 Denunciar post Postado Junho 2, 2009 Isso te ajudará: » Removendo TAGs HTML de textos ~TiuTalk~, beleza? Cara, isso vai me ajudar sim, mas em outra parte da programação... :D Eu to fazendo um sistema de template onde o usuário poderá criar seu próprio template. O sistema trabalhará da seguinte forma: Supondo que o usuário entre no meu site pelo index.php. o index.php abrirá o template (index.html) para mostrar o site.. Só que esse index.html, cada usuário cadastrado poderá alterar seu template de uso, então o que quero, é garantir que o usuário cadastrado, não coloque nenhum código php imbutido no template que ele criou ou alterou, entendem? Se eu tirar as tags HTML, o template passará a não funcionar. ;) Grande abraço. Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Junho 2, 2009 $string = '<?php bla bla bla ?>'; str_replace("<?php", "<?", "<?", $string); Compartilhar este post Link para o post Compartilhar em outros sites
cg-auto 0 Denunciar post Postado Junho 2, 2009 $string = '<?php bla bla bla ?>'; str_replace("<?php", "<?", "<?", $string); beleza André? :D Esse código está incorreto, não? (o primeiro argumento é a palavra a ser pesquisada, o segundo é a substituição e a terceira que é a frase... o quarto argumento você colocou como a frase, sendo que ele na verdade é a variavel que vai guardar a quantidade de alterações. Acho que você quis colocar assim: $string = '<?php bla bla bla ?>'; str_replace("<?php", "<?", $string); Mesmo assim ainda não é o que eu preciso.. Vejamos mais um exemplo... Vamos supor que o usuário criou esse simples template pra ele index.html <html"> <head> <title>[TITULO_PAGINA]</title> </head> <body> <div align="center"> <p class="title">[TITULO_PAGINA]</p> <p class="description">[MINHA_DESCRICAO]</p> <div style="float:right">[NOME_USUARIO]</div> <div style="float:left">[URL_USUARIO]</div> </div> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="20%" height="169" align="center"><?="meu nome"; ?></td> <td width="60%"><? //início do código malicioso bla, bla, bla; mais bla, bla, bla; //final do código malicioso ?></td> <td width="20%" align="center"><?php echo "Minha URL"; ?></td> </tr> <tr> <td height="126" align="center"> </td> <td> </td> <td align="center"> </td> </tr> </table> </body> </html> O meu arquivo index.php vai abrir essa página e assim executar os códigos PHP que estão nela. E é justamente o que quero evitar. Perceba que no index.html, eu coloquei 2 tipos de tags php diferentes.. <? e <?PHP. O que eu preciso é que todas os blocos inteiros de php sejam excluídos, não apenas substituir a tag "<?PHP", e sim o bloco inteiro <?PHP tudo o que tiver aqui............; ?> sem mexer no restante do código HTML :D Grande abraço. Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Junho 2, 2009 Correção: $string = '<?php bla bla bla ?>'; $procurar = array("<?php", "<?PHP", "<?", "?>"); // Coloque todas as variações aqui $string = str_replace($procurar, "", $string);Assim funciona :) -- Se você usar essa função: http://www.php.net/htmlspecialchars Ela vai trocar o < e > dos blocos PHP e o PHP não será "lido" (parseado)... Ou seja, se o usuário inserir "<?php echo 'uhu!'; ?>" vai aparecer literalmente isso... incluindo os <?php e ?>. Acho que é isso que você quer, não? Compartilhar este post Link para o post Compartilhar em outros sites
cg-auto 0 Denunciar post Postado Junho 2, 2009 Correção: $string = '<?php bla bla bla ?>'; $procurar = array("<?php", "<?PHP", "<?", "?>"); // Coloque todas as variações aqui $string = str_replace($procurar, "", $string);Assim funciona :) -- Se você usar essa função: http://www.php.net/htmlspecialchars Ela vai trocar o < e > dos blocos PHP e o PHP não será "lido" (parseado)... Ou seja, se o usuário inserir "<?php echo 'uhu!'; ?>" vai aparecer literalmente isso... incluindo os <?php e ?>. Acho que é isso que você quer, não? Opa, beleza ~TiuTalk~? :D Não é isso... Preciso substituir todo o bloco php, não só as tags. "<?PHP Código inteiro; ?>" Isso tudo que ta entre aspas duplas por "Não é permitido inserir instruções ou códigos PHP." Não só as tags "<?", "<?PHP", "<?php" e "?>" Mas sim o bloco inteiro junto com todo o código que ele colocou dentro dessas tags.... Só um str_replace não é possível fazer isso... O meu problema é bem mais complexo... Voltamos ao HTML de exemplo... HTML de entrada. <html> <head> <title>[TITULO_PAGINA]</title> </head> <body> <div align="center"> <p class="title">[TITULO_PAGINA]</p> <p class="description">[MINHA_DESCRICAO]</p> <div style="float:right">[NOME_USUARIO]</div> <div style="float:left">[URL_USUARIO]</div> </div> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="20%" height="169" align="center"><?="meu nome"; ?></td> <td width="60%"><? // Inicio do código malicioso bla, bla, bla; mais bla, bla, bla; //final do codigo malicioso; ?></td> <td width="20%" align="center"><?php echo "Minha URL"; ?></td> </tr> <tr> <td height="126" align="center"> </td> <td> </td> <td align="center"> </td> </tr> </table> </body> </html> A saída esperada é a seguinte: <html> <head> <title>[TITULO_PAGINA]</title> </head> <body> <div align="center"> <p class="title">[TITULO_PAGINA]</p> <p class="description">[MINHA_DESCRICAO]</p> <div style="float:right">[NOME_USUARIO]</div> <div style="float:left">[URL_USUARIO]</div> </div> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="20%" height="169" align="center">Não é permitido inserir instruções ou códigos PHP.</td> <td width="60%">Não é permitido inserir instruções ou códigos PHP.</td> <td width="20%" align="center">Não é permitido inserir instruções ou códigos PHP.</td> </tr> <tr> <td height="126" align="center"> </td> <td> </td> <td align="center"> </td> </tr> </table> </body> </html> Grande abraço. Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Junho 3, 2009 É, tava pensando em fazer um array e acabei fazendo uma m***** hehe. Valeu pela correção thiago. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Junho 3, 2009 Hum... vê com essa ER.. <?php $var = 'tal'; $string = '<?php echo $var; ?>aaa'; $pattern = "/<\?(.*)\?>/"; $replacement = ''; echo preg_replace($pattern, $replacement, $string); fiz meio correndo.. Compartilhar este post Link para o post Compartilhar em outros sites
cg-auto 0 Denunciar post Postado Junho 3, 2009 É, tava pensando em fazer um array e acabei fazendo uma m***** hehe. Valeu pela correção thiago. Não esquenta André.. Erros acontecem. :D Galera, acho que a direção são mesmo as expressões regulares, vou tentar aqui... Valeu William... Grande abraço. Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Junho 3, 2009 Use expressões regulares...veja: <?php $str = '<?php abc ?>'; echo 'Sem replace:', htmlspecialchars($str), nl2br("\n"), 'Com replace:', htmlspecialchars(preg_replace('/\<\?(php|\=)?(.*)?\?\>/is', '', $str)); ?> O htmlspecialchars foi só pra você não ter que ver no source a primeira string... Compartilhar este post Link para o post Compartilhar em outros sites
cg-auto 0 Denunciar post Postado Junho 3, 2009 Hum... vê com essa ER.. <?php $var = 'tal'; $string = '<?php echo $var; ?>aaa'; $pattern = "/<\?(.*)\?>/"; $replacement = ''; echo preg_replace($pattern, $replacement, $string); fiz meio correndo.. Use expressões regulares...veja: <?php $str = '<?php abc ?>'; echo 'Sem replace:', htmlspecialchars($str), nl2br("\n"), 'Com replace:', htmlspecialchars(preg_replace('/\<\?(php|\=)?(.*)?\?\>/is', '', $str)); ?> O htmlspecialchars foi só pra você não ter que ver no source a primeira string... beleza galera? Po gente.. Exatamente isso que tava precisando funcionou aqui William.. eibon, fiz vários testes, mas num não deu certo.. Por exemplo, o usuário sacana fizer <? qualquercoisa <? ?> abri 2x o <? e fechei somente uma.. ele substitui o restante do código inteiro.. Mas é o único erro que deu.. Galera, muito obrigado mesmo pela força de todos! Só um último pedido: Será que poderiam me explicar exatamente op que está no $pattern proposto pelo nosso amigo William? (eu seu que funcionou, mas gostaria de saber como.. huahuahua Queria entender a solução. Grande abraço e muito obrigado a todos :D. Compartilhar este post Link para o post Compartilhar em outros sites