Eu tenho uma caixa de texto de postagem personalizada que desejo limpar wp_kses
antes de atualizar minha meta meta de postagem.
Eu estava procurando exemplos de $allowed
configurações comuns , mas só vi este exemplo:
$allowed = array(
'a' => array( // on allow a tags
'href' => array() // and those anchors can only have href attribute
)
);
O que é uma wp_kses
$allowed
configuração típica ? Alguém pode fornecer um exemplo do que eles normalmente filtram?
Respostas:
Eu discordo da solução postada por @JaredCobb,
wp_kses()
é muito mais flexível do que o método que ele apresentou. Ele pode remover atributos indesejados das tags sem destruir as próprias tags. Por exemplo, se o usuário digitar<strong class='foo'>
,wp_kses()
retornará<strong>
se você não permitir a classe, enquantostrip_tags()
removeria<strong>
completamente.@redconservatory: os atributos que você deseja usar são os seguintes:
Isso permitirá negrito e itálico sem atributos, além de tags de âncora com
href
atributos ... e nada mais. Ele usa o princípio da lista de permissões, que o @jaredcobb observou com razão é o melhor caminho a percorrer aqui.fonte
wp_kses
permite mais controle do que as opções nativas do PHP. Eu acho que disse isso. Eu usei a palavra "atributos" também. Eu estava dizendo que depende do seu caso de uso. Alguém tentando proteger seus dados de todas as tags seria melhor usar strip_tags IMHO, mas é mais da minha preferência do que qualquer outra coisa. Felicidades.Eu começaria com a mesma
$allowedtags
matriz que o WordPress usa para seus comentários. Você pode encontrar sua matriz no[wordpress directory]/wp-includes/kses.php
arquivo. Esses parecem padrões sensatos para mim e um bom ponto de partida. Aqui está sua matriz ...Eu não usaria PHP
strip_tags
como um substituto parawp_kses
.Você nunca deve usar strip_tags para filtrar o conteúdo de um usuário desconhecido!
Eu criei um vídeo rápido explicando Por que o wp_kses () do WordPress é melhor que o strip_tags () do PHP, por segurança .
fonte
Só usei
wp_kses
quando precisei especificamente permitir / filtrar atributos de tags HTML (por exemplo, quero que eles tenham uma<image>
tag, com umsrc=""
atributo, mas não quero que eles possam mashref=""
oustyle=""
ou qualquer outra coisa na tag da imagem.Nesse caso,wp_kses
é útil porque (como você pode ver no exemplo que você criou) você pode filtrar de forma muito específica.Eu raramente usei issowp_kses
porque acho que apenas um par de PHP nativo As funções (abaixo) fazem o truque e são mais fáceis de entender quando eu olho o código vários meses depois.Se você deseja remover completamente as tags HTML (exceto talvez permitir algumas), eu sempre uso
strip_tags
. Você pode passar uma série de tags permitidas (como<p> <br> <strong>
) ou qualquer outra tag inofensiva que desejar. Isso permite que o usuário possa ter algum controle sobre a formatação, se aplicável ao seu caso de uso. Gostostrip_tags
porque é preciso uma abordagem da lista de desbloqueio para limpar seus dados. (Isso significa que tudo é retirado, exceto o que você coloca na lista de permissões explicitamente).Se seu objetivo é permitir que eles coloquem HTML no conteúdo, mas você só deseja mostrar o texto deles conforme eles entraram (como exemplos de código), use
htmlspecialchars
. Isso converterá caracteres HTML em seus equivalentes codificados para que você possa imprimi-lo com segurança na página.Você pode se deparar com um código usando o
str_replace
qual "procura" marcas ruins como ou o que quer que seja. Eu realmente não recomendo essa abordagem, porque ela usa uma abordagem de lista negra para desinfetar dados e você precisa constantemente garantir que sua lista negra esteja atualizada.Acho que, para resumir, depende do uso dos seus metaboxes. Se você estiver protegendo contra a entrada de usuários (que podem ser maliciosos), recomendo
strip_tags
e permita apenas algumas das tags inofensivas. Se você tem um bom caso de negócios para realmente gerenciar as tags e atributos específicos do conteúdo do usuáriouse wp_kses
,.fonte
wp_kses()
faz tudo o questrip_tags()
faz e muito mais? Sou a favor de manter as coisas simples, mas também acho que há um argumento para não "surpreender" ninguém.wp_kses()
é "o caminho do Wordpress" e, como estamos escrevendo o código do Wordpress, há um argumento de que provavelmente é a melhor escolha. Além disso, se em algum momento no futuro, quisermos colocar na lista de permissões determinadas combinações de tags / atributos, usarwp_kses()
desde o início não exige refatoração.Ai está. Isso funciona tanto no WordPress como fora dele.
fonte
Você também pode usar a função wp_kses_post, que é usada no conteúdo da postagem e requer apenas dados como parâmetro.
Mais informações aqui: http://codex.wordpress.org/Function_Reference/wp_kses_post
fonte
@Svetoslav Marinov
Eu adicionei esse código logo após $ buffer = trim ($ buffer);
para tentar limpar o html e evitar que os caracteres ocultos colados quebrem o código, mas não funciona, ele limpa o html, mas os caracteres ocultos ainda permanecem.
fonte