2017-02-22 115 views
0

我使用Jsoup的parseBodyFragment()parse()方法來處理由腳本,無腳本和樣式標記組成的代碼塊。目標不是清理它們 - 只需要select(),分析並輸出它們。 select()部分工作得很好。如何阻止Jsoup編碼URL參數?

但問題是它會自動編碼src屬性的url參數。所以,當輸入是這樣的:

<noscript> 
<img height="1" width="1" style="display:none;" alt="" src="https://something.orother.com/i/cnt?txn_id=123&p_id=123"/> 
</noscript> 

我結束了這一點,從Jsoup返回,通過outerHTML()方法:

<noscript> 
<img height="1" width="1" style="display:none;" alt="" src="https://something.orother.com/i/cnt?txn_id=123&amp;p_id=123"/> 
</noscript> 

問題是在url參數標準號(&)正在編碼並輸出爲&amp;。有沒有辦法來禁用這個?

我正在尋找一種方法來獲取所選元素的html而無需修改。謝謝!

更新(2/23/2016):澄清的問題。另外,在Github回購中發現了一個描述問題的問題:https://github.com/jhy/jsoup/issues/372。看起來這可能是不可能的。

+0

您可以使用parse獲取pagedocument,然後使用select獲取內容。 – thanga

+0

@thanga謝謝 - 我應該更清楚;我可以使用select來獲得它 - 問題出現在我得到它之後。看起來Jsoup修改了html而沒有獲得原始代碼的方式。我在Github回購庫上發現了一個問題,因此我認爲這可能是不可能的。我會更新問題以包含問題的鏈接。 –

回答

0

原始HTML無效。無法啓動字符引用的&必須在HTML屬性值中表示爲&amp;

預計HTML解析器將執行錯誤恢復並生成有效的DOM。

Jsoup通過將HTML解析爲DOM,讓您在其上運行查詢,然後將DOM導出回HTML。

您無法避免空白標準化,錯誤恢復或解析器所做的其他任何事情。 Jsoup使用的方法來提取數據的目的不是爲了支持錯誤的保存。

+0

謝謝,但我的理解是HTML5放寬了這個限制。請參閱:http://stackoverflow.com/a/19442133/5361034,其中還引用了規範:https://www.w3.org/TR/html5/syntax.html#tokenizing-character-references - –