0

Tagsoupが入力を妨害し、正しくフォーマットしていません。たとえば、次のマークアップがある場合

<a href="www.google.com"></a>Text outside anchor

次のようにフォーマットされています

<a href="www.google.com">Text outside anchor</a>

これは単純な例ですが、他にも問題があります。そこで、textareaコントロールに属性を追加することで、tagsoupのクリーンアップ/フォーマットをオプションにしました。

これがdiffです(https://github.com/binnyg/orbeon-forms/commit/044c29e32ce36e5b391abfc782ee44f0354bddd3)。

Textareaは次のようになります

<textarea skip-cleanmarkup="true" mediatype="text/html" />

2つの質問

  1. これは正しいアプローチですか?
  2. パッチを提供した場合、それはorbeonコードベースに到達できますか?

ありがとうBinnyG

4

3 に答える 3

0

エリック、アレックス、他

ここには2つの質問があると思います:

最初の懸念事項は、タグ スープと OOTB で発生するクリーンアップの問題です。空のタグは、マークアップとして消費/クライアント ブラウザーに送信されると、firefox などのブラウザーによって「修正」されますが、精度が失われるため、シングルトン タグに変換されます。彼らは間違ったことをします。

この場合、このクリーンアップをオフにすると役立ちますが、この問題だけでは、セキュリティ機能と整形式のマークアップ機能が失われるため、実際には正しい答えではありません。少なくとも特定の空のタグ (無効なシングルトン タグに変換する以外)。

これはすべて、これらの機能を常に使用したいという2番目の懸念につながります。私たちのユースケースはノーと言います。無効かどうかに関係なく、ユーザーが必要なマークアップを吐き出せるようにしたいと考えています。ユーザーをクロス スクリプト コーディングから保護する必要があるアプリにフォームを配置するのではなく、ユーザーが Web ページを編集できるようにするツールを構築しているため、クリーンアップをオフにしました。

しかし、クリーンアップ卸売をオフにしますか? それが私たちのユースケースが要求するものである場合、それを実行できることが重要ですが、私たちが持っている実装はすべてかゼロかです. クリーンアップの戦略を定義できるとよいでしょう。その関数をプラグ可能にします。例: * システムの XML 構成で、指定された戦略を実装するクラス名への構成名の「マップ」を定義します。XForm Def では、作成者はマップから名前を指定します。

于 2010-12-30T05:59:26.083 に答える
0

Binesh と私は同意します。バグがある場合は、根本に近い問題に対処することをお勧めします。しかし、私は彼が問題の一部に過ぎない特定の問題だと思います。

RTE が適切なサーバー側の処理を呼び出すことができるように、または指定されていない場合はデフォルトを呼び出すことができるように、何らかの名前と戦略のマッピングを用意するのが最善であると考えています。

于 2011-01-03T16:39:13.420 に答える
0

TagSoup が変換する場合:

<a href="www.google.com"></a>Text outside anchor

の中へ:

<a href="www.google.com">Text outside anchor</a>

TagSoup のバグではないでしょうか? その場合は、TagSoup を無効にするよりも、この問題を修正した方がよいと思います。しかし、これは TagSoup のバグではありません。これが起こっているようです。ブラウザがクライアントに次を送信するとします。

<a shape="rect"></a>After<br clear="none">

これは TagSoup を通過し、結果は XSLT クリーンアップ コードを通過し、以下がブラウザーに送信されます。

<a shape="rect"/>After<br clear="none"/>

問題はブラウザにあり、これは次のように変換されます。

<a shape="rect">After</a><br clear="none"/>

問題は、これを で XML としてDom4jUtils.domToString(cleanedDocument)シリアライズすることですが、HTML としてシリアライズする方がより賢明です。ここでは、Saxon シリアライザーを使用できます。からも使われていHTMLSerializerます。を使用する代わりに、このコードを使用するように変更してみてくださいDom4jUtils.domToString()。それを行う機会があれば、見つけたものをお知らせください。

于 2010-12-31T00:17:48.080 に答える