1

bleach使用しています。これは、テンプレートhtml5libとして設計された HTML フラグメントであるユーザー生成コンテンツをクリーンアップするために使用しますdust.js

この状況を除いて、すべてがうまくいきました-

入力:

<table>
    {#loop}
      <tr>
         <td>{name}</td>
      </tr>
    {/loop}
</table>

出力:

    {#loop}
    {/loop}
<table>
      <tr>
         <td>{name}</td>
      </tr>
</table>

ループ タグはテーブルの外に配置されています。これは完全に理にかなっています-html5libは私のhtmlを修正しています。コンテンツは、td/th タグでラップされていない限り、テーブル構造内にあってはなりません。私は通常、このような修正が行われることを望んでおり、それでも修正が行われることを望んでいますが、何らかの方法でこれらのタグを取得する方法があるかどうか疑問に思っています.

過去に同様の状況に遭遇し、このサニタイズ動作を抑制できた人はいますか?

これまでに思いついた唯一のアプローチは、正規表現できるタグでコントロールをラップすることです。

<table>
    <tr data-layout=""><td>{#loop}</td></tr>
      <tr>
         <td>{name}</td>
      </tr>
    <tr data-layout=""><td>{/loop}</td></tr>
</table>

このアプローチの問題は、このフォーマット ハックを正規表現すると、簡単に元に戻すことができないことです。エンコードされたテンプレートは編集できなくなります。

4

2 に答える 2

-1

ブリーチには、ホワイトリストのタグ/属性が組み込まれています。ただし、既存のホワイトリストタグ/属性を拡張またはオーバーライドできます。以下は、既存の「ホワイトリスト」にカスタム タグを追加する方法の例です。

bleach.ALLOWED_TAGS.extend( ['{#*}' , '{/*}' ] )

単純にブリーチすると「{#loop} {/loop}」タグがマークされ、安全にエスケープできます。

** ブリーチの公式ドキュメントには、ワイルドカードホワイトリストタグ/属性を定義する方法の詳細が記載されています。

于 2014-05-08T00:06:16.163 に答える