【问题标题】:Is AngularJS's ngSanitize supposed to fix tags?AngularJS 的 ngSanitize 应该修复标签吗?
【发布时间】:2014-10-23 05:27:33
【问题描述】:

仍然不确定何时使用 Sanitize,何时不使用。我将旧数据库移到新机器上。它有相当多的博客文章。我曾经用 PHP 来显示这些,这非常直观。对于 Angular 方式,我不能说太多。

angular.module( 'myApp', ['ngSanitize'] );
function blogController($scope,$http,$sanitize) {

    var site = "http://onfilm.us/gamengai";
    var page = "/fft.php";

    console.log( site + page );

    $http.get( site + page )
    .success(function(response) {

        for ( var i = 0; i < response.length; i++ ) {
            response[i].text = response[i].text.replace( /<br\s*\/?>/mg, "\n" );
            // response[i].text = $sanitize( response[i].text ); // this mangles it
        }

        $scope.data = response;
    });
}

我在
上运行了一个正则表达式来处理这个问题。

上面从 PHP 脚本中获取数据。如果我清理文本,它会将那些引号和撇号变成垃圾。 (也许他们逃脱了?)更重要的是,不被尊重。它被打印为字符串文字。

我问了这个问题并被建议进行消毒,但它只解决了部分问题。

编辑:原始文本(在数据库中)类似于“MyLink”。这正是它在页面上的显示方式。在此处查看实际操作:http://onfilm.us/gamengai/index.html

【问题讨论】:

  • 你能告诉我们(a)原始文本是什么,(b)$sanitize 正在生成什么吗?
  • 另外,进一步考虑,您期望 $sanitize 做什么?它从字符串中去除可能不安全的 html。
  • 编辑后的帖子 - 有看头。我想我想清理句柄标签以及引号、撇号等。是否有另一种方法可以防止 Angular 对标签做任何事情?

标签: javascript angularjs sanitize


【解决方案1】:

$sanitize 据我所知,实际上并没有对您的原始字符串做任何不利的事情。它的目的是从一个不受信任的来源的字符串中去除可能不安全的 html;它有效,只是不是你想象的那样。

您的问题实际上是无关的。问题是您如何将文本绑定到其元素。目前你只是绑定一个字符串,所以这就是你得到的。你真正想要的是ng-bind-html。现在,它确实比这更复杂一些,因为要绑定 html,您需要使用 $sce 首先将导入的资源标记为可信任。

首先包含 $sce 作为依赖项,然后...

$http.get(site + page).success(function(response) {

    $scope.data = response.map(function(article) {
        article.text = $sce.trustAsHtml(article.text);
        return article;
    });

});

然后在你的 html 中,你目前有这个......

<div class="text">{{ item.text }}<br></div>

改成:

<div class="text" ng-bind-html="item.text"></div>

【讨论】:

  • 附录:我刚刚注意到您使用的是旧版本的 Angular。我不确定 $sce 在该版本中是否可用,因为在某些早期版本中 html 绑定的处理方式不同。无论如何,我强烈建议升级到 Angular 1.3,它有很多重要的错误修复/一般改进。
  • 谢谢,我明天会检查这个。今晚关机。不过看起来是好东西。一个问题:ng-bind-html="item"> 是如何工作的?我需要它来输出项目的特定成员......特别是“文本”。
  • 哦,你说得对;那只是一个错字。我会解决的。
  • 约扎!它奏效了——非常感谢。 ;) 现在到 routeParams。 :)
猜你喜欢
  • 2011-08-07
  • 2014-04-28
  • 2023-03-26
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
相关资源
最近更新 更多