2017-07-28 52 views
1

我需要一個java函數來轉換現有的html-String中的umlaute。因此,例如我有在現有的HTML字符串中轉換變音符號(Java函數)

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

現在該函數應該將所有類型的umaute轉換爲其轉義形式。所以應該讓HTML代碼不變,但只需更換一個 - > ä和U - >中導致

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

上面的例子ü我非常清楚的事實,有像escapeHtml4的逃逸功能負荷 。問題是所有的html都被轉換,所以html代碼也被轉義了。我正在尋找一個函數,只標識html代碼中的文本部分,然後對它們進行編碼。

此外,在這種情況下,設置UTF-8編碼不適合我。

+0

'yourString.replace(「ü」,「&uuml」);' – Lino

+0

如何確保替換所有可用的變音符號? – user668338

+0

爲ö和ä重複相同的語句 – Lino

回答

0

您必須首先解析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逃脫了他們。

+0

如何知道元素是否包含文本而不是html代碼? – user668338

+0

Jsoup將您的html文本轉換爲java對象的樹:在根處有一個「Document」,並且這些文檔由「Elements」和「TextNode」的樹組成。在你的例子中,我猜'äü'是'body'元素中的一個TextNode。然後,您應該將TextNode的內容替換爲其html轉義形式,然後使用修改後的Tree重構HTML。從解析文檔開始([Jsoup - 解析和遍歷文檔](https://jsoup.org/cookbook/introduction/parsing-a-document)) –

+0

使用JSoup變得非常簡單。看到我更新的答案。 –

相關問題