Elemento Whitelist com class de, usando o htmlpurifier

Eu quero apenas permitir o elemento span somente quando tem uma certa class em htmlpurifier

Alguém sabe como fazer isso, agora eu tenho

$config->set('HTML.Allowed','a[href],p,ol,li,ul,img[src],blockquote,em,span[class]'); $config->set('Attr.AllowedClasses',"allowed"); 

mas isso permite todos os intervalos e só permite que a class permita que eu pareça que ele só permite a class “permitida”, mas eu só quero que ele permita a extensão quando o valor de sua class é “permitido”

obrigado

Solução Ad hoc: redefinir a class em extensão necessária e configurá-la para que ela possua N valores possíveis. O que é necessário exigirá que a etiqueta seja removida se ela não existir.

Ok, de acordo com a sugestão de Ambush-comander, consegui remover todos os intervalos que não possuíam uma class específica, a idéia é que, se a class exigisse, o elemento não possui essa class, o elemento será removido.

Eu fiz algumas pesquisas e encontrei a página de personalização htmlpurifier que explica como adicionar um atributo seguindo suas instruções eu só preciso de quatro linhas adicionais de código, então aqui é o que eu fiz

  // more configuration stuff up here $config->set('HTML.DefinitionID', 'enduser-customize.html editor'); $config->set('HTML.DefinitionRev', 1); $def = $config->getHTMLDefinition(true); $def->addAttribute('span', 'class*', new HTMLPurifier_AttrDef_Enum( array('allowed') )); // purify down here 

O * em sala de aula faz com que a class requiresse e, por isso, só permitimos a class “permitida”, tudo o resto fica listrado. agora, há uma ressalva para fazê-lo dessa maneira. se alguém colocar essa class lá dentro, então seria permitido no meu caso, eu realmente não estou usando “permitido” Estou usando outra coisa que será substituída pelo purificador html

outra pessoa

e graças a emboscada e pinkgothic por toda a sua ajuda!

Você deixou um comentário na minha pergunta semelhante . Eu ainda não tenho uma solução, devido à ordem de injeção / purificação que, no meu caso, é fundamental, mas a solução do injetor deve funcionar para você, já que você não depende do “pré-processamento”, por assim dizer.

Tanto quanto posso ver, você tem dois decentes três detalhadamente quatro opções:

  1. Você pode usar a solução de atributos na minha pergunta para em branco todos os atributos se você não se importar com as marcas de esquerda e em seu HTML. Se você se importar com eles, você poderia combinar essa solução com um injetor de remoção de etiquetas vazias , embora a ordem de execução seja muito, muito susceptível de aleijá-lo de novo. (Então eu imagino. Se não – excelente, você tem sua resposta! :))

  2. Você pode usar injetores. Eles são uma característica bastante detalhada e detalhada do HTML Purifier, então não consigo conjurar um exemplo que irá consertar as coisas para você fora da checkbox. Mas! Você pode querer olhar para o tópico no fórum HTML Purifier onde o injetor ‘Linkify’ foi criado , essa é uma tomada bastante completa sobre o assunto, para não mencionar o injetor que eu mencionei no # 1 pode ajudá-lo a descobri-los, também.

  3. Algo que eu estou investigando agora, para meus propósitos, são os methods DOM incorporados do PHP. Esta é uma alternativa sólida se # 1 e # 2 falharem por algum motivo, mas, claro, são tão onerosos quanto os resources forem.

  4. Expressões regulares. Eu realmente só menciono isso como último recurso e nem sequer é uma sugestão séria. Provavelmente seria razoavelmente seguro usar uma regex no HTML já purificado , mas parece ser um desperdício de um bom analisador de HTML. (Mas então, é certo, então o # 3.)

Boa sorte.

Na documentação não há nada sobre a configuração de valores de atributos. No entanto, se você usar a class apenas uma vez que eu acho que não haverá nenhum problema se você fará conforme você escreveu. 😉