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:

  1. vazio (valor padrão);
  2. post;
  3. strip;
  4. data;
  5. entities;
  6. 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.



Comments

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *