Criando um htmlentities que ignora tags
Prefácio
Salve, salve, galerinha. Venho vos escrever após um certo período de recesso, onde estive envolvido com MUITOS projetos, um deles inclusive é o novo layout do PHPit, o qual estou preparando para o ano vindouro.
Sem mais delongas, vamos para o que interessa.
O intuito hoje é montar uma função semelhante ao htmlentities, mas que ignore as tags que existem no seu texto.
Bem bacana e bem simples de fazer! :)
Conceito
O primeiro passo é obter a tabela de conversão de caracteres. Com a get_html_translation_table, nós iremos passar a constante HTML_ENTITIES a fim de obter a tabela com todos os caracteres traduzidos pela função htmlentities.
Uma vez feito isso, vamos obter a tabela de conversão de caracteres referente a função htmlspecialchars, a qual traduz apenas caracteres que dizem respeito aos caracteres especiais utilizados por tags html. A constante agora é HTML_SPECIALCHARS.
Depois disso devemos computar a diferença entre uma array e outra, a fim de retirar os caracteres do html de dentro de todos os outros (que aqui tratam-se de letras acentuadas, basicamente).
Feito isso, finalmente usamos a strtr para traduzirmos os caracteres! :)
Vamos por isso em prática?
Mão na massa
Juntando tudo isso, teremos um código semelhante a este:
Código: Alternar entre o modo de cópia/destaque
<?php function htmlwtags($str) { // Pega todos os caracteres que devem ser convertidos // Encontra a lista de caracteres que serão retirados da tabela // Remove os caracteres que não deve ser convertidos (caracteres html) // Traduz tudo bonitinho! :) // Êêêêêêê!!! \o/ return $str; } ?>
<?php
function htmlwtags($str) {
// Pega todos os caracteres que devem ser convertidos
$caracteres = get_html_translation_table(HTML_ENTITIES);
// Encontra a lista de caracteres que serão retirados da tabela
$remover = get_html_translation_table(HTML_SPECIALCHARS);
// Remove os caracteres que não deve ser convertidos (caracteres html)
$caracteres = array_diff($caracteres, $remover);
// Traduz tudo bonitinho! :)
$str = strtr($str, $caracteres);
// Êêêêêêê!!! \o/
return $str;
}
?>
Função bem bonitinha e bem simples. Resultados garantidos! Qualquer bug, me mande um e-mail, por favor! :D
Conclusão
Não tem muita coisa o que concluir hoje, então serei breve...
Espero que esta seja a minha última coluna antes do novo layout...
xDDD
Aceito sugestões sempre, beleza?
Um forte abraço a todos e fiquem com Deus! :)
PHP levado a sério