2011-04-21 58 views
11

在Java中,是否有第三方源可用或快速命令將字符串中的html特殊字符轉換爲html編碼的內容?如何在html內容中編碼特殊字符

例如:

Original code:  <>&abcdef © 
After encoding: &lt;&gt;&amp;abcdef&copy; 
+0

如果您有這樣的輸入(HTML與非轉義的非HTML混合在一起),那麼您已經有可能被洗劫一空了。轉義HTML特殊字符專門用於避免使用真正的HTML造成混淆,而以後可能無法解析。 – deceze 2011-04-21 08:19:43

+0

上述示例不能完全按照原樣進行。您的文本不是有效的HTML,您將無法找到工具,也無法正確編寫適用於無效HTML的程序,因爲您無法正確定義正確的行爲。 – Notinlist 2011-04-21 08:29:29

+0

我正在使用java ... – Roshan 2011-04-21 08:43:34

回答

6

如果你想爲一個字符串爲HTML實體轉換爲快速測試的東西,你可以使用web服務像這樣的:

http://www.primitivetype.com/resources/htmlentities.php

[編輯] 對於Java,您可以使用Apache Commons Lang中的StringEscapeUtils。看到這個線程: Recommended method for escaping HTML in Java

import static org.apache.commons.lang.StringEscapeUtils.escapeHtml; 
// ... 
String source = "The less than sign (<) and ampersand (&) must be escaped before using them in HTML"; 
String escaped = escapeHtml(source); 

我借用了上面提到的線程的例子。

+0

如果你想在代碼中做到這一點,你有告訴我們你正在使用哪種編程語言 – 2011-04-21 08:22:06

+0

我想要一個在java中的解決方案 – Roshan 2011-04-21 09:14:05

+0

我認爲它將取代所有<作爲<我不希望小於div中的符號要更改 – Roshan 2011-04-21 09:50:16

2

轉換

< → & LT;

> → & gt;

' → &#39;

" → &「

& → & amp;

知識的來源:http://hu.php.net/manual/en/function.htmlspecialchars.php

+0

您可以在JavaScript中實現它或任何語言很容易。 – Notinlist 2011-04-21 08:27:24

+0

謝謝! 我只是在尋找這個等價的「表」...不幸的是,鏈接被打破,但主要的字符在那裏:) – 2017-06-26 13:39:24

0

下面是一些java代碼爲密切複製PHP的默認用htmlspecialchars(STR)儘可能:

首先讓我們來看看如何PHP的作品htmlspecialchars(str)

php> echo htmlspecialchars("abc\ndef"); 
abc 
def 
php> echo htmlspecialchars("abc&def"); 
abc&amp;def 
php> echo htmlspecialchars("abc<>\"&def"); 
abc&lt;&gt;&quot;&amp;def 
php> echo htmlspecialchars("abc<>\"&d'ef"); 
abc&lt;&gt;&quot;&amp;d'ef 
php> echo htmlspecialchars("abc< >\"&d'ef"); 
abc&lt; &gt;&quot;&amp;d'ef 
php> echo htmlspecialchars("abc def"); 
abc def 
php> 

注:

  1. 空格和換行保持原樣。
  2. 定義的實體每個實例被替換一次。
  3. 如版權©和歐元符號的額外產品保持原樣。

代碼:

public class Main{ 
    public static void main(String[] args) { 
     System.out.println("'" + stringToHtmlString("&") + "'"); 
     System.out.println("'" + stringToHtmlString("<") + "'"); 
     System.out.println("'" + stringToHtmlString(">") + "'"); 
     System.out.println("'" + stringToHtmlString(" ") + "'"); 
     System.out.println("'" + stringToHtmlString("  ") + "'"); 
     System.out.println("'" + stringToHtmlString("&<>abc") + "'"); 
     System.out.println("'" + stringToHtmlString("abc&<>") + "'"); 
    } 
    public static final String stringToHtmlString(String s){ 
     StringBuffer sb = new StringBuffer(); 
     int n = s.length(); 
     for (int i = 0; i < n; i++) { 
      char c = s.charAt(i); 
      switch (c) { 
      case '<': sb.append("&lt;"); break; 
      case '>': sb.append("&gt;"); break; 
      case '&': sb.append("&amp;"); break; 
      case '"': sb.append("&quot;"); break; 
      default: sb.append(c); break; 
      } 
     } 
     return sb.toString(); 
    } 
} 

它打印:

[email protected] ~ $ java Main 
'&amp;' 
'&lt;' 
'&gt;' 
' ' 
'  ' 
'&amp;&lt;&gt;abc' 
'abc&amp;&lt;&gt;' 

這不是PHP的htmlspecialchars(str)功能的完美克隆,但它是足夠接近我。

這裏還有一個它確實HTML實體轉換爲混淆的字符集:http://www.rgagnon.com/javadetails/java-0306.html

0

這是舊的,但它不具備和接受的答案,這是我的版本絲毫純java:

public String toHTML(String str) { 
    String out = ""; 
    for (char c: str.toCharArray()) { 
     if(!Character.isLetterOrDigit(c)) 
      out += String.format("&#x%x;", (int)c); 
     else 
      out += String.format("%s", c); 

    } 
    return out; 
} 

偉大的作品html5和utf-8。 (對不起,我的英語不好)。