2016-08-28 1 views
2

J'essaie d'utiliser bleach pour échapper les balises HTML. Cela fonctionne très bien, sauf si j'essaie d'insérer un code découpé en tant que contenu d'une page. L'extrait de code est inséré comme ceci:Rendre Bleach pour autoriser les balises de code

<pre> 
<code> 
Code sample 
</code> 
</pre> 

L'échantillon de code peut contenir des étiquettes html. Comment puis-je faire en sorte que l'eau de Javel n'échappe pas aux étiquettes si elles sont à l'intérieur <pre><code>? Je sais que je peux ajouter des balises à la liste blanche, mais il semble qu'il n'y ait pas moyen de mettre toutes les balises dans la liste blanche si elles se trouvent dans le bloc de code et dans la liste noire dans les autres cas. Le balisage html externe est produit à partir de Markdown.

De plus, l'eau de Javel échappe à tous < et> signes, mais si elles se produisent dans l'extrait de code, il ressemble à ceci:

for (auto a = 0; i &lt; 10; ++i) 

Si l'eau de Javel n'est pas capable de cela, pourriez-vous conseiller une autre escaper, que peut faire ce dont j'ai besoin?

+0

Vous voulez (avez besoin) que les balises d'un bloc de code soient échappées. C'est la seule façon dont ils s'afficheront correctement dans votre navigateur. Je suis confus quel est votre problème ici. – Waylan

Répondre

0

Vous souhaitez ajouter à la liste blanche des balises enfants de < pre> et < code>. D'après ce que je peux déduire de la lecture sur la documentation, vous devez définir un à un les balises que vous voulez mettre en liste blanche ou utiliser un callable qui chaque fois qu'une balise est rencontrée, l'appelable sera invoqué.

Vérifiez la documentation de la section nommée: Callable Filters

Une solution possible pour votre problème est de passer une fonction sur le bleach.clean propre qui vérifiera si l'étiquette rencontrée par la méthode alors propre est un enfant de la code html tag. Vous devrez analyser le code HTML là, vous pouvez utiliser l'analyseur HTML pour que, avec TreeBuilder de xml.eTree package

Voici un example sur une réponse différente.