2

Sinatra、Rubyアプリでページ処理を行うためにNokogiriを使用しています。

だから私がこれをするとき:

require 'nokogiri'
s='<a href="<%=@prevHref%>">a</a>'
doc = Nokogiri::HTML.fragment(s)
puts doc.to_s

私は得る

<a href="%5C&lt;%=@prevHref%%5C&gt;">a</a>

コードがエスケープされました。これを回避するにはどうすればよいですか?実際に私がしていることは次のとおりです。

  1. ディスク上のテンプレートを開く
  2. のこぎりで解析する
  3. 一部のノードを置き換えます(エスケープされるノードではなく、他のノード)
  4. テンプレートをディスクに保存します
  5. ERBマークアップが台無しにされたため、明らかに失敗するERBを使用してテンプレートを解析します。
4

2 に答える 2

2

sNokogiriで文字列を解析する前に、まずerbを介して文字列を実行する必要があります。そうでなければ、あなたはそれを正しくやっています。

于 2012-05-25T11:06:29.990 に答える
0

このページの他の場所で説明されているように、Nokogiri(より正確にはlibxml2)はErbを内部的に表すことはできません。たとえば、値のHTML出力を生成する次の有効なErbテンプレートについて考えてみます。

<p<%="> Hello"%> World!<%="</p"%>>

考えてみると、のこぎりがそこからDOMを作成できると期待するのは無理だと気付くでしょう。

Erb(HTMLまたはXMLとして解析できない)を使用する代わりに、有効なマークアップを使用するテンプレート言語を使用する必要があります。例えば:

  • Amrita-有効なX/HTMLを取得し、Rubyデータ構造と組み合わせてHTML出力を生成します。
  • Kwartz-有効なX/HTMLを取得し、CSSのようなデータバインディングファイルと組み合わせてErbテンプレートを生成します。
于 2012-05-25T15:44:13.000 に答える