2010-12-30 7 views
0

Tagsoupは入力を妨害し、間違ってフォーマットしています。我々は次のマークアップ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 skip-cleanmarkup="true" mediatype="text/html" />

二つの質問

  1. これは正しいアプローチですように見えるのでしょうか?
  2. パッチを提供すれば、コードベースにすることができますか?

おかげ BinnyG

答えて

0

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

私は2つの質問はここにあると思います。

最初の懸念は、タグのスープと何が起こるのクリーンアップの質問ですOOTB:空タグはシンプトンタグに変換されます。マークアップはfirefoxのようなブラウザで "固定"となるが、正確さが失われてしまうため、クライアントブラウザに消費/送信されたときに間違ったことが起こる。

このクリーンアップを無効にすると、この問題が解決されますが、セキュリティ機能と整形式機能が不要になるため、この問題だけでは正しい解決策ではありません。調整が必要な場合があります(無効なシングルトンタグに入れ替える以外の)少なくとも特定の空のタグを処理することになります。

これは、常にこれらの機能を有効にしたいという第2の懸念につながります。私たちのユースケースはnoと言います。私たちは、ユーザーが望みどおりのマークアップを無効にすることができるようにしたいと考えています。私たちは、クロススクリプトコーディングからユーザを保護する必要のあるアプリケーションにフォームを入れているわけではなく、ユーザがWebページを編集できるツールを構築しているため、クリーンアップは無効にしています。

しかし、クリーンアップ卸売をオフにしますか?それは、私たちのユースケースが求めているものであれば、私たちができることは重要ですが、私たちの実装は、すべてかどうかです。クリーンアップのための戦略を定義することができればうれしいでしょう。その機能をプラグイン可能にします。例: *システムのXML構成では、特定の戦略を実装するクラス名に対する構成名の「マップ」を定義します。 XForm Defでは、作成者はマップから名前を指定します。

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"/> 

問題は、Hとしてそれをシリアル化するために、より慎重になりながら、我々は、Dom4jUtils.domToString(cleanedDocument)とXMLとしてこれをシリアル化ということですTML。ここでは、Saxonシリアライザを使用できます。また、HTMLSerializerからも使用されています。おそらく、このコードを変更してDom4jUtils.domToString()の代わりに使用することができます。あなたがそれを行うチャンスを得るときにあなたが見つけたものを私たちに知らせるでしょう。

0

Bineshと私は同意します。バグがある場合は、ルートに近い問題を解決することをお勧めします。しかし、私は特定の問題は彼が問題の一部に過ぎないと思う。

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

+0

私たちの場合、私たちはユーザーとコンテンツを信頼します。クリーンアップは不要です。ラスの場合、クリーンアップ戦略がプラグゲーブルであるか、完全に無効になっている方が良いでしょう。 – BinnyG

+0

あなたが覚えているユースケースに十分な設定パラメータがありますか?これにより、アプリケーション全体のクリーンアップを無効にすることも、フォーム単位でクリーンアップを無効にすることもできます。 – avernet

+0

フォーム単位で行うことができれば良いでしょうが、現在のユースケースではグローバル構成パラメータで十分です。 – BinnyG

関連する問題