2016-08-18 107 views
0

你好考慮到我從我的HTML下面的代碼從我的服務器:AngularJS秀逃脫HTML

&quote;<b>Demo</b>&quote; &amp;Hase&gt; 

我怎麼能渲染爲:

「演示」

而試玩會「胖」,AngularJS有沒有辦法?實際上讓演示爲大膽是沒有問題的$sceng-bind-html但是其他的東西仍然是&quote;或&而不是他們未轉義的副本。

HTML是來自elasticsearch的突出顯示功能escape: 'html'因此實際上我們不會將數據轉移到elasticsearch並讓elasticsearch執行此操作。

這實際上使得它的工作:

function unescapeHtml(safe) { 
     return safe.replace(/&amp;/g, '\&') // this needs to be /& ?! 
      .replace(/&lt;/g, '&lt;') 
      .replace(/&gt;/g, '&gt;') 
      .replace(/&quot;/g, '&quot;') 
      .replace(/&apos;/g, '&apos;') 
      .replace(/&#039;/g, "\'"); 
    } 

不知道爲什麼艱難......這是愚蠢的,也許有人能賜教。也許charset問題?!

+1

這是你在找什麼 - $ sce.trustAsHtml(」 " 演示 "「) - >這將使‘演示’以粗體 – Developer

+0

實際上它並呈現"演示"e; –

+0

如何你要綁定該值來查看?你能分享一下嗎? –

回答

-1

你可以達到你想要的東西通過創建自定義過濾器和HTML轉義

angular.module('app', []) 
    .filter('unescape', function($sce) { 

      function unescapeHtml(safe) { 
      return safe.replace(/&amp;/g, '&') 
       .replace(/&lt;/g, '<') 
       .replace(/&gt;/g, '>') 
       .replace(/&quot;/g, '"') 
       .replace(/&#039;/g, "'"); 
      } 

      return function(input) { 
       var unescaped = unescapeHtml(input); 
       return $sce.trustAsHtml(unescaped); 
      }; 
    }); 

,並使用這種方式

{{ $ctrl.content | unescape }} 
+0

這沒有任何意義,對不起,但後來我會與XSS的問題。 –