Fondamentalement, je voudrais décoder un document Html donné et remplacer tous les caractères spéciaux, tels que " "
-> " "
, ">"
-> ">"
.
Dans .NET, nous pouvons utiliser HttpUtility.HtmlDecode
.
Quelle est la fonction équivalente en Java?
Réponses:
J'ai utilisé Apache Commons StringEscapeUtils.unescapeHtml4 () pour cela:
la source
<p>üè</p>
en<p>üé</p>
, avecStringEscapeUtils.unescapeHtml4()
je reçois<p>üè</p>
. Existe-t-il un moyen de conserver intactes les balises HTML existantes?Les bibliothèques mentionnées dans d'autres réponses seraient de bonnes solutions, mais si vous êtes déjà en train de fouiller dans le html du monde réel dans votre projet, le
Jsoup
projet a beaucoup plus à offrir que de simplement gérer des choses «esperluette FFFF point-virgule» .Et vous obtenez également l'API pratique pour extraire et manipuler des données, en utilisant le meilleur des méthodes DOM, CSS et jquery. C'est une licence open source et MIT.
la source
.text()
place de.getText()
org.jsoup.parser.Parser.unescapeEntities(String string, boolean inAttribute)
. Documents de l'J'ai essayé Apache Commons StringEscapeUtils.unescapeHtml3 () dans mon projet, mais je n'étais pas satisfait de ses performances. Il s'avère que cela fait beaucoup d'opérations inutiles. D'une part, il alloue un StringWriter pour chaque appel, même s'il n'y a rien à échapper dans la chaîne. J'ai réécrit ce code différemment, maintenant cela fonctionne beaucoup plus rapidement. Quiconque trouve cela dans Google est invité à l'utiliser.
Le code suivant déséchappe tous les symboles HTML 3 et les échappements numériques (équivalent à Apache unescapeHtml3). Vous pouvez simplement ajouter d'autres entrées à la carte si vous avez besoin de HTML 4.
la source
<s:property value="..."/>
). La désactivation de l'échappement (<s:property value="..." escaping="false"/>
) a permis à certaines pages de s'exécuter 5% à 20% plus rapidement.auml
est par exempleä
et nonд
.La bibliothèque suivante peut également être utilisée pour l'échappement HTML en Java: unbescape .
Le HTML peut être sans échappement de cette façon:
la source
%3Chtml%3E%0D%0A%3Chead%3E%0D%0A%3Ctitle%3Etest%3C%2Ftitle%3E%0D%0A%3C%2Fhead%3E%0D%0A%3Cbody%3E%0D%0Atest%0D%0A%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E
Cela a fait le travail pour moi,
ou
Je suppose qu'il est toujours préférable d'utiliser le
lang3
pour des raisons évidentes. J'espère que cela t'aides :)la source
Une solution très simple mais inefficace sans bibliothèque externe est:
Cela ne doit être utilisé que si vous n'avez qu'un petit nombre de chaînes à décoder.
la source
Le moyen le plus fiable est avec
de
org.apache.commons.lang3.StringEscapeUtils
.Et pour échapper aux espaces blancs
Cela garantira que les espaces en raison du copier-coller dans les formulaires Web ne seront pas persistants dans DB.
la source
Spring Framework HtmlUtils
Si vous utilisez déjà le framework Spring, utilisez la méthode suivante:
la source
Pensez à utiliser la classe Java HtmlManipulator . Vous devrez peut-être ajouter certains éléments (toutes les entités ne sont pas dans la liste).
Apache Commons StringEscapeUtils comme suggéré par Kevin Hakanson n'a pas fonctionné à 100% pour moi; plusieurs entités comme & # 145 (guillemet simple à gauche) ont été traduites d'une manière ou d'une autre en «222». J'ai également essayé org.jsoup et j'ai eu le même problème.
la source
Dans mon cas, j'utilise la méthode replace en testant chaque entité dans chaque variable, mon code ressemble à ceci:
Dans mon cas, cela a très bien fonctionné.
la source
Dans le cas où vous voudriez imiter quelle fonction php htmlspecialchars_decode utilise la fonction php get_html_translation_table () pour vider la table, puis utilisez le code java comme,
la source