Javascript中的Unescape字符串

时间:2016-07-05 03:58:03

标签: javascript xml escaping

我需要在Javascript中使用unescape字符串,但我的字符串有时已经没有转义,有时则不是:

// String 1
<?xml version="1.0" encoding="UTF-8" ?>

// String 2
<?xml version="1.0" encoding="UTF-8"?>

我使用以下方法:

function htmlDecode(input)
{
  var doc = new DOMParser().parseFromString(input, "text/html");
  return doc.documentElement.textContent;
}

但问题是当我“解码”字符串2时,答案出现为?xml version="1.0" encoding="UTF-8"?

非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

您可以对字符串执行正则表达式检查,以查看字符的编码版本是否存在。如果它们确实存在,那么进行解码,否则,只需返回您交给函数的内容。

var string1 = '&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;';
var string2 = '<?xml version="1.0" encoding="UTF-8"?>';

function decode(input) {
  if (/&amp;|&quot;|&#39;|'&lt;|&gt;/.test(input)) {
    var doc = new DOMParser().parseFromString(input, "text/html");
    return doc.documentElement.textContent;
  }
  return input;
}

console.log(decode(string1));
console.log(decode(string2))

更简单(更好):

此方法不需要正则表达式,并且将始终返回未转义的字符串而不会“过度使用”它们:

var string1 = '&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;';
var string2 = '<?xml version="1.0" encoding="UTF-8"?>';

function decode(input) {
  var txt = document.createElement("textarea");
  txt.innerHTML = input;
  return txt.value;
}

console.log(decode(string1));
console.log(decode(string2))