【问题标题】:Convert Umlaut in existing HTML String (Java function)转换现有 HTML 字符串中的元音变音(Java 函数)
【发布时间】:2018-01-04 00:27:23
【问题描述】:

我需要一个 java 函数来转换现有 html-String 中的变音符号。所以例如我有

<html>
<body>
äü
</body> 
</html>

现在该函数应该将所有类型的 umaute 转换为其转义形式。所以它应该保持 html 代码完整,但只需替换上面示例中的 -> ä 和 ü -> ü 导致

<html>
<body>
&auml;&uuml;
</body>
</html>

我很清楚有很多转义函数,比如escapeHtml4 .问题是所有的 html 都被转换了,所以 html 代码也被转义了。我正在寻找一个仅识别 html 代码中的文本部分然后对其进行编码的函数。

在这种情况下,我无法进一步设置 UTF-8 编码。

【问题讨论】:

  • yourString.replace("ü","&amp;uuml");
  • 如何确保替换所有可用的变音符号?
  • 对 ö 和 ä 也重复相同的语句

标签: java html encode


【解决方案1】:

您必须先解析 html 文件,然后仅在相关部分应用转义。

例如,Jsoup 是一个 html 解析器。您可以遍历 html 元素,然后操作它们的内容。

更新:事实证明,使用 Jsoup 非常简单:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class StackOverflow {

    static final String HTML = "<html><body>äü</body></html>";

    public static void main(String... args) {
        Document doc = Jsoup.parse(HTML);
        doc.outputSettings().escapeMode(Entities.EscapeMode.base);
        doc.outputSettings().charset("ASCII");
        System.out.println(doc.toString());
    }
}

产生:

<html>
 <head></head>
 <body>
  &auml;&uuml;
 </body>
</html>

通过在输出设置中将字符集设置为 ASCII,您就是在告诉 Jsoup 它不应该输出 UTF-8 字符。结果,Jsoup 逃脱了它们。

【讨论】:

  • 我怎么知道元素是否包含文本而不是html代码?
  • Jsoup 将您的 html 文本转换为 java 对象树:在根有一个 Document,文档由 ElementsTextNode 的树组成。在您的示例中,我猜 'äü' 将是 'body' 元素中的 TextNode。然后,您应该将 TextNode 的内容替换为其 html 转义形式,并使用修改后的 Tree 重新组合 HTML。首先解析您的文档 (Jsoup - parsing and traversing a Document)
  • 原来使用 JSoup 非常简单。请参阅我的更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多