我有一些包含 XHTML 字符实体的字符串:
"They're quite varied"
"Sometimes the string ∈ XML standard, sometimes ∈ HTML4 standard"
"Therefore -> I need an XHTML entity decoder."
"Sadly, some strings are not valid XML & are not-quite-so-valid HTML <- but I want them to work, too."
有没有简单的方法解码实体? (我正在使用Java)
我目前正在使用StringEscapeUtils.unescapeHtml4(myString.replace("'", "\'"))
作为临时黑客。遗憾的是,org.apache.commons.lang3.StringEscapeUtils
有unescapeHtml4
和unescapeXML
,但没有unescapeXhtml
。
编辑:我确实想要处理无效的XML,例如我想要“&amp;&amp; xyzzy;”解码为“&amp;&amp; xyzzy;”
编辑:我认为HTML5与XHTML的字符实体几乎相同,所以我认为HTML 5 解码器也可以。答案 0 :(得分:1)
您是否尝试过基于 org.apache.commons.text.StringEscapeUtils 提供的工具实现 XHTMLStringEscapeUtils?
import org.apache.commons.text.StringEscapeUtils;
import org.apache.commons.text.translate.*;
public class XHTMLStringEscapeUtils {
public static final CharSequenceTranslator ESCAPE_XHTML =
new AggregateTranslator(
new LookupTranslator(EntityArrays.BASIC_ESCAPE),
new LookupTranslator(EntityArrays.ISO8859_1_ESCAPE),
new LookupTranslator(EntityArrays.HTML40_EXTENDED_ESCAPE)
).with(StringEscapeUtils.ESCAPE_XML11);
public static final CharSequenceTranslator UNESCAPE_XHTML =
new AggregateTranslator(
new LookupTranslator(EntityArrays.BASIC_UNESCAPE),
new LookupTranslator(EntityArrays.ISO8859_1_UNESCAPE),
new LookupTranslator(EntityArrays.HTML40_EXTENDED_UNESCAPE),
new NumericEntityUnescaper(),
new LookupTranslator(EntityArrays.APOS_UNESCAPE)
);
public static final String escape(final String input) {
return ESCAPE_XHTML.translate(input);
}
public static final String unescape(final String input) {
return UNESCAPE_XHTML.translate(input);
}
}
感谢 Apache commons-text lib 的模块化设计,可以轻松创建自定义转义工具。
您可以在此处找到带有测试的完整项目xhtml-string-escape-utils
答案 1 :(得分:0)
这可能不是直接相关的,但您可能希望采用JSoup来处理类似的事情,尽管从更高层次开始。包括网页清理程序。