2013-04-14 107 views
0

我在Java中工作,我有這樣的例子:HTML CDATA問題

http://jsfiddle.net/uAQ94/1/

但是,當我想要顯示的最終HTML,我不能看到CDATA標籤包圍的特殊字符。 例如:

<![CDATA[à]] not show the à character 

我需要了解這一點,因爲我必須執行此代碼:

try { 
     DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
     Document doc = builder.parse(new StringBufferInputStream(escapedStr)); 
     ITextRenderer renderer = new ITextRenderer(); 
     renderer.setDocument(doc, null); 
     renderer.layout(); 
     OutputStream os = response.getOutputStream(); 
     renderer.createPDF(os); 
     os.close(); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

得到一個PDF頁面。

爲什麼CDATA不顯示任何特殊字符?

+0

爲什麼你首先在那裏使用CDATA部分? – Quentin

回答

1

在HTML中,CDATA部分只能出現在foreign XML elements之內,然後纔會出現在相對較新的瀏覽器中。

Section 12.1.5

CDATA段只能在國外的內容(MathML或SVG)使用。

CDATA部分也是有問題的,因爲有渲染CDATA節,它的值包含字符串"]]>"沒有簡單的方法。

由於這兩個原因,大多數HTML呈現器都會將CDATA節轉換爲常規實體轉義文本節點。


<p> 
    <![CDATA[à]]> 
    <![CDATA[ò]]> 
    <![CDATA[è]]>+ 
    <![CDATA[ì]]> 
</p> 

這些CDATA部分沒有在國外XML。它們位於常規HTML <p>元素內,因此不允許使用。

與這些重音元音躲閃編碼問題的最簡單的方法是使用HTML數字字符引用:

<p> &#224; &#242; &#232;+ &#236; </p> 

應該是等價的(歸一化後)到原來的。

+0

指定重音元音的最好方法是使用支持它們的字符編碼......無論它們是否出現在CDATA節中,您都必須這樣做。使用數字字符引用只會使源代碼難以閱讀。 – Quentin

+0

@Quentin,我同意可讀性,但有時您無法控制HTML所提供的內容類型標題。例如,生成只能出現在主體中的HTML代碼片段(不是'')或作爲HTML引誘程序的一部分。在這種情況下,生成7位拉丁文輸出可能是最好的互操作。我假設OP嘗試像CDATA部分那樣的原因是因爲他們有某種編碼互操作問題。 –

+0

我同意@Quentin,使用正確的編碼(可能是UTF-8),並且您不必擔心特殊字符,請參閱[setXMLEncoding](http://dom4j.sourceforge.net/dom4j-1.6.1 /apidocs/org/dom4j/Document.html#setXMLEncoding(java.lang.String)) – lolotron