JSON에서 표준 문자열로 디코딩

4

질문:

안녕하세요. 저는 현재 REST 서비스로 데이터를 끌어올리고 angular을 사용하여 전방에서 데이터를 인쇄하고 있습니다.
내가 겪고 있는 문제는 끌어당기고 있는 문자열이 실체를 벗어났다는 것이다. 예를 들어 '예를 들면 프랑스에서 가장 인기 있는 거리의 계발을 받는다는 것이 아니다.
decodeURI는 전혀 작동하지 않는 것 같습니다.
사용자 정의 필터를 만들고 위조 요소를 만들고 innerHTML을 위조 요소로 설정한 다음 해석한 후에 innerHTML를 가져와 이 값을 되돌려주는 방법을 찾았습니다.
.filter("decoder", function() {
  return function(item) {
    var txt = item;
    var dummy = document.createElement('p');
    dummy.innerHTML = txt;
    txt = dummy.innerHTML;
    dummy.remove();
    return txt;
  }
})
그것은 정말 더럽다고 느꼈기 때문에, 그것들이 DOM 조작을 피하는 방법인지 알고 싶다.
고맙습니다

답안

각각 수동으로 교체할 수 있습니다.
.filter("decoder", function () {
  return function (item) {
    return item
      .replace(/'/g, "'")
      .replace(/"/g, '"')
      .replace(/&/g, "&")
      .replace(/&lt;/g, "<")
      .replace(/&gt;/g, ">");
  }
})
나는 이 목록이 모든 내용을 포함한다고 생각하지만, 다른 내용을 보면 언제든지 목록에 추가할 수 있다.이것은 여전히 약간 혼란스럽지만, 나는 이것이 DOM에 원소를 추가하는 것보다 낫다고 생각한다.
업데이트
보다 완전한 솔루션을 찾고 있는 경우 다음을 수행할 수 있습니다.
.filter("decoder", function () {
  return function (item) {
    // it would be better to define this globally as opposed to within the function
    var ENTITIES = {
      '&amp': '&',
      '&amp;': '&',
      '&apos': '\'',
      '&apos;': '\'',
      '&gt': '>',
      '&gt;': '>',
      '&lt': '<',
      '&lt;': '<',
      '&quot': '"',
      '&quot;': '"'
    };
    return item.replace(/&#?[0-9a-zA-Z]+;?/g, function (entity) {
      if (entity.charAt(1) === '#') { // if it's a numeric entity
        var code;

        if (entity.charAt(2).toLowerCase() === 'x') { // if it's a hex code
          code = parseInt(entity.substr(3), 16);
        } else {
          code = parseInt(entity.substr(2));
        }

        if (isNaN(code) || code < -32768 || code > 65535) { // if it's not a valid numeric entity
          return '';
        }
        return String.fromCharCode(code);
      }
      return ENTITIES[entity] || entity;
    });
  }
});
보시다시피 이 해결 방안은 훨씬 복잡하지만, 일반 실체와 모든 수치 실체를 포함하고 있습니다.만약 당신의 목표가 장래의 갱신을 피하는 것이라면, 이것은 당신의 가장 좋은 선택이다.