2017-02-23 9 views
0

我々はHTML文字列をサニタイズする必要があると私たちは例えば、NG-バインドHTMLディレクティブを使用することはできませんsuposeます:AngularJSとサニタイズ - ngBind指令なしのサニタイズHTML

<span data-toggle="tooltip" title="Edit {{customer.name}}">Text</span> 

我々は、特別な文字を持っている場合をcustomer.nameこの行は&eacute;のようなhtml版として印刷され、代わりにéが必要です。このHTMLを "翻訳" することができます

  • $sce.trustAsHtml(customer.name)
  • $sce.parseAsHtml(customer.name)

しかし、何も:

私がテストしています。これはどうやってできますか?

簡潔な説明は、指示文内でhtmlをどのように消毒するかです(本体にはng-bind-htmlではありません)。 oficial documentationから

答えて

0

ngBindHtmlは$ sce.parseAsHtml(バインディング式)を使用しています。ここでは、実際のコード(やや簡略化)があります:

var ngBindHtmlDirective = ['$sce', function($sce) { 
    return function(scope, element, attr) { 
    scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) { 
     element.html(value || ''); 
    }); 
    }; 
}]; 

ので、私はあなたが必要とするすべての$sce.parseAsHtmlhttps://docs.angularjs.org/api/ng/service/$sce#parseAsHtml)だと思います。


とにかくHTMLを印刷するように角度を説得することができない場合は、あなたはあなたがここにいくつかの基本的なコードを見つけることができます

customer.name.replace(/&eacute;/g, String.fromCharCode(233)); 

を使用しようとすることができます:http://www.javascripter.net/faq/accentedcharacters.htm

動作するはずですが、間違いなく最適なソリューションではありません。常にng-bind-htmlを使用してください。

+0

ええ、私はその解決策を知っています。しかし、私の質問は、ngSanitizeプラグインを使用して 'ng-bind-html'以外のすべてのhtml char(安全ではないもの)のサニタイズを行うことです。私が示した例のようなディレクティブは使えません。とにかく助けてくれてありがとう。 –

+0

私はaskinの前にその解決策を試しました。私は関数 'return $ sce.parseAsHtml(value)'を実行しましたが、HTMLの 'title =" Edit {{parseCode(customer.name)}} ''では機能しませんでした。 –

1

複雑である必要はありません。

代わりに、要素にはsetAttributetextContent(V.S. innerHTML)を使用してください。ブラウザ自体は、あなたのために念入りに処理します。

// To set element attributes 
$span.setAttribute("title", "Edit" + customer.name); 

// To set element content 
$span.textContent = customer.name; 

詳細については、the post hereを参照してください。これらはもちろん1回限りのバインディングなので、アップデートが必要な場合は、ちょうど$watchを投げてください。

+0

はい、それは解決策ではありません。それはあなたがしなければならないsanizitationsの量、スコープと腕時計を念頭に置いたモジュール性のための多くの機能でさえ、コントローラに多くのソースコードを生成する可能性があります。これは私の唯一の解決策です、私はそれを受け入れる必要があると思います。あなたの助けに感謝します。 –