Páginas

terça-feira, 16 de agosto de 2011

Helper para CodeIgniter - Strip Tags Attributes

Desenvolvendo um CMS com CodeIgniter surgiu a necessidade de que o texto inserido pelo usuário fosse salvo limpo na base de dados, sem estilos e formatações que atualmente não são aceitas pelas webstandards.

Tentei utilizar somente o strip_tags() - nativo a partir do PHP 4.

Não foi o suficiente, os estilos e outros atributos continuavam por ali e estragavam a aparência do site.

Encontrei na página da função, no próprio manual(site) do PHP que fala sobre a strip_tags()-http://php.net/manual/pt_BR/function.strip-tags.php a resposta para o que eu estava precisando:

nauthiz693 at gmail dot com 12-Jun-2009 08:31

<?php function strip_tags_attributes($string,$allowtags=NULL,$allowattributes=NULL){
    
$string strip_tags($string,$allowtags);
    if (!
is_null($allowattributes)) {
        if(!
is_array($allowattributes))
            
$allowattributes explode(",",$allowattributes);
        if(
is_array($allowattributes))
            
$allowattributes implode(")(?<!",$allowattributes);
        if (
strlen($allowattributes) > 0)
            
$allowattributes "(?<!".$allowattributes.")";
        
$string preg_replace_callback("/<[^>]*>/i",create_function(
            
'$matches',
            
'return preg_replace("/ [^ =]*'.$allowattributes.'=(\"[^\"]*\"|\'[^\']*\')/i", "", $matches[0]);'   
        
),$string);
    }
    return 
$string
?> 




Então criei um Helper para CodeIgniter chamado remove_html_helper.php com o código acima e depois foi só chamar no meu controlador antes de inserir no banco de dados.

Exemplo de utilização:

$descricao = $this->input->post('descricao');
$this->load->helper('remove_html_helper');
$descricao = strip_tags_attributes($descricao,'<h2><h3><h4><h5><h6><p><strong><a><ul><ol><li><b><i><br><span><div><table><tr><th><td><img>','href,rel,src');
$data['descricao'] = $descricao;

0 comentários:

Postar um comentário