2017-02-22 4 views
0

私は、スクリプト、noscript、およびスタイルタグで構成されたコードのブロックを処理するために、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> 

outerHTML()メソッドを介して、Jsoupから返さ:

<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を変更せずに取得する方法を探しています。ありがとう!

更新(2011年2月23日):明白な問題。また、問題を説明するGithubリポジトリに問題が見つかりました:https://github.com/jhy/jsoup/issues/372。これは不可能かもしれないように見えます。

+0

parseを使用してページ文書を取得し、後で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 - –

関連する問題