Com a função PHP wp_kses() você filtra um conteúdo para permitir apenas certos códigos HTML. Isto é muito útil para fazer a limpeza de códigos maliciosos ou então de códigos inapropriados para o local onde o conteúdo será exibido.
Veja o exemplo abaixo que possui um $conteudo
com alguns códigos HTML dentro dele. Farei uma limpeza nesses códigos, para deixar somente as $tags_permitidas
com a função wp_kses.
<?php
$conteudo = '<p>Oi, eu sou um <strong>conteúdo com HTML</strong> e com <a href="#teste" title="teste">links</a>, vamos ver <em>o que</em> acontece!</p>';
$tags_permitidas = array(
'p' => array(),
'a' => array(
'href' => array(),
)
);
echo wp_kses( $conteudo, $tags_permitidas );
Code language: PHP (php)
O código acima exibirá o seguinte conteúdo em HTML:
<p>Oi, eu sou um conteúdo com HTML e com <a href="#teste">links</a>, vamos ver o que acontece!</p>
Code language: HTML, XML (xml)
Você pode notar que as tags <strong>
e <em>
foram removidas, assim como o atributo title do <a>
, pois não estavam especificadas em $tags_permitidas
.
A função também possui um terceiro parâmetro para especificar o protocolo ($allowed_protocols
), como: HTTP, HTTPS, FTP e TelNet.
Se você quiser um filtro exclusivo para conteúdo de posts, é possível também utilizar a função PHP wp_kses_post().
Lista de tags ou protocolos padrões para utilizar como referência
O WordPress possui uma lista de tags HTML permitidas por padrão que fica disponível no arquivo wp-includes/kses.php.
Também é possível utilizar a função PHP wp_kses_allowed_html() para retornar as tags permitidas, dado um desses contextos:
- vazio (valor padrão);
post
;strip
;data
;entities
;- ou nome do campo de filtro.
Além disso, também tem a função PHP wp_allowed_protocols() para retornar uma lista com todos os protocolos permitidos por padrão pelo WordPress.
Utilizando wp_kses() para filtrar códigos de editores de texto no WordPress
Um caso bem comum é colar conteúdo de editores de texto (ex: Microsoft Word, Google Docs) ou de planilhas dentro de um campo com editor rico (WYSIWYG) e algumas tags de estilos vem junto, como no exemplo abaixo:
<span style="color: #ff0000;"><span style="font-family: Arial;"><span style="font-size: small;">Isto é um <b>conteúdo colado</b> do <i>LibreOffice Writer</i>, similar ao Word.</span></span></span>
Code language: HTML, XML (xml)
Para remover todas as tags que não forem <b>
ou <i>
, utilize o código abaixo:
<?php
$conteudo = '<span style="color: #ff0000;"><span style="font-family: Arial;"><span style="font-size: small;">Isto é um <b>conteúdo colado</b> do <i>LibreOffice Writer</i>, similar ao Word.</span></span></span>';
$tags_permitidas = array(
'b' => array(),
'i' => array()
);
echo wp_kses( $conteudo, $tags_permitidas );
Code language: PHP (php)
Que exibirá o seguinte conteúdo em HTML:
Isto é um <b>conteúdo colado</b> do <i>LibreOffice Writer</i>, similar ao Word.
Code language: HTML, XML (xml)
Desta forma é possível ter um controle bem granular do tipo de HTML que é permitido, evitando assim vários problemas, inclusive de segurança.
Deixe um comentário