Javascript AngularJS和Sanitize-不使用ngBind指令清理HTML

Javascript AngularJS和Sanitize-不使用ngBind指令清理HTML,javascript,angularjs,html-sanitizing,Javascript,Angularjs,Html Sanitizing,假设我们需要清理HTML字符串,并且不能使用ng bind HTML指令,例如: <span data-toggle="tooltip" title="Edit {{customer.name}}">Text</span> 文本 如果customer.name中有特殊字符,则该行将以html版本打印,如é而我们想要的是é 我测试过: $sce.trustAsHtml(customer.name) $sce.parseAsHtml(customer.nam

假设我们需要清理HTML字符串,并且不能使用ng bind HTML指令,例如:

<span data-toggle="tooltip" title="Edit {{customer.name}}">Text</span>
文本
如果customer.name中有特殊字符,则该行将以html版本打印,如
é而我们想要的是
é

我测试过:

  • $sce.trustAsHtml(customer.name)
  • $sce.parseAsHtml(customer.name)
但是没有什么可以“翻译”这个html。如何做到这一点

一个简短的解释是:如何在指令中清理html(而不是在带有
ng bind html的正文中)。

来自:

ngBindHtml使用$sce.parseAsHtml(绑定表达式)。以下是实际代码(稍微简化):

所以我认为您只需要
$sce.parseAsHtml
()


如果您无法说服angular打印HTML,您可以尝试使用

customer.name.replace(/&eacute;/g, String.fromCharCode(233));
您可以在此处找到一些基本代码:


这应该行得通,但这肯定不是最好的解决方案。您应该始终使用
ngbindhtml

它不必如此复杂

相反,在元素上使用
setAttribute
textContent
(V.S.innerHTML),浏览器本身将为您进行清理

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

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

有关更多详细信息,请参阅。当然,这些是一次性绑定,因此如果您需要更新,只需将
$watch
放在中间。

是的,我知道这个解决方案,替换将始终有效。但是我的问题是关于使用ngSanitize插件,以便对
ngbind html
之外的每个html字符(甚至不安全)进行清理,我的意思是在不能像我展示的示例那样使用指令的地方。不管怎样,谢谢你的帮助。在问阿金之前,我确实试过那个方法。我做了一个函数
return$sce.parseAsHtml(value)
,但它不起作用,在HTML
title=“Edit{{{parseCode(customer.name)}}”
中。是的,它可以提供解决方案,没有那么优雅或有角度的解决方案。它可以在控制器中生成大量源代码,这取决于您必须执行的sanizitation的数量,甚至是考虑到范围和监视的模块化功能。这是我唯一的解决办法,我想我必须接受它。非常感谢你的帮助。
// To set element attributes
$span.setAttribute("title", "Edit" + customer.name);

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