2016-08-18 5 views
0

Здравствуйте учитывая, что я получаю следующий код из моего HTML с моего сервера:AngularJS показать спасся HTML

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

Как я мог вынести, что, как:

«Демо»

во время демонстрационного будет «жир», есть ли способ в AngularJS? На самом деле получение демоверсии для жирного шрифта не составляет проблем с $sce и ng-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, "\'"); 
    } 

не уверен, почему жестко ... Это глупо, может быть, кто-нибудь может просветить меня. возможно, проблемы с кодировкой?

+1

Это то, что вы ищете - $ sce.trustAsHtml (» " Demo " «) -> это сделает„Demo“жирным – Developer

+0

на самом деле это делает " Demo "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. –

Смежные вопросы