2017-02-23 3 views
0

Lets nehme an brauchen wir eine HTML-Zeichenfolge sanieren, und wir können nicht ng-bind-html-Richtlinie verwenden, zum Beispiel:AngularJS und Desinfizieren - Sanitize HTML ohne ngBind Richtlinie

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

Wenn wir Sonderzeichen in customer.name Diese Zeile würde als HTML-Version wie &eacute; gedruckt werden und wir möchten stattdessen é.

Ich habe getestet mit:

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

Aber nichts kann diesen HTML "übersetzen". Wie kann das gemacht werden?

Eine kurze Erklärung wäre: wie html in einer Direktive (nicht im Körper mit ng-bind-html) hygienisiert werden.

Antwort

0

Aus oficial documentation:

ngBindHtml verwendet $ sce.parseAsHtml (Bindungsausdruck). Hier ist der eigentliche Code (etwas vereinfacht):

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

so glaube ich, alles, was Sie brauchen, ist $sce.parseAsHtml (https://docs.angularjs.org/api/ng/service/$sce#parseAsHtml).


Wenn Sie nicht in der Lage sind kantig zu überzeugen HTML sowieso zu drucken, können Sie versuchen,

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

Sie verwenden können einige grundlegende Codes finden Sie hier: http://www.javascripter.net/faq/accentedcharacters.htm

Das sollte funktionieren, aber es ist definitiv nicht die beste Lösung. Sie sollten immer ng-bind-html verwenden.

+0

Ja, ich weiß, dass die Lösung ersetzt wird immer funktionieren. Aber meine Frage ist über die Verwendung von ngSanitize Plugin, um die Bereinigung von jedem HTML-Zeichen (auch unsicher) außerhalb der 'ng-bind-html' zu tun, ich meine, wo Sie die Direktive nicht wie das Beispiel, das ich zeigte, verwenden können. Danke für deine Hilfe trotzdem. –

+0

Ich habe diese Lösung vor dem Askin versucht. Ich habe eine Funktion 'return $ sce.parseAsHtml (value)' gemacht, aber es hat nicht funktioniert, und im HTML 'title =" Edit {{parseCode (customer.name)}} ". –

1

Es muss nicht so kompliziert sein.

Verwenden Sie stattdessen setAttribute und textContent (V.S. innerHTML) für Elemente, und Browser selbst kümmern sich um die Bereinigung für Sie.

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

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

Weitere Einzelheiten finden Sie unter the post here. Dies sind natürlich einmalige Bindungen. Wenn Sie also Updates benötigen, werfen Sie einfach $watch in die Mitte.

+0

Ja, es könnte Lösung sein, keine so elegante oder eckige Lösung. Es könnte eine Menge Quellcode in der Steuerung abhängig von der Menge der Sanizationen, die Sie tun müssen, sogar so viele Funktionen für Modularität auf den Umfang und Uhren ausgerichtet erzeugen. Das ist meine einzige Lösung, ich nehme an, ich muss es akzeptieren. Vielen dank für Deine Hilfe. –

Verwandte Themen