欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript各种常见编码解码转换

程序员文章站 2022-07-05 14:43:12
...

 

一般我们使用正则表达式转换特殊编码,如< > &,这类一般为html encode,比较容易替换,如下

RegExp 

function htmlDecodeByRegExp(str) {
	var s = "";
	if (str.length == 0)
		return "";
	s = str.replace(/&amp;/g, "&");
	s = s.replace(/&lt;/g, "<");
	s = s.replace(/&gt;/g, ">");
	s = s.replace(/&nbsp;/g, " ");
	s = s.replace(/&#39;/g, "\'");
	s = s.replace(/&quot;/g, "\"");
	return s;
}

当存在以下编码:

  1. &lt;&gt;&amp;
  2. &nbsp;&copy;&quot;&reg;
  3. &#65;&#66;&#20013;&#25991;
  4. &#x4E2D;&#x6587;
  5. Unicode编码的十进制或16进制表示的转义

再使用正则表达式就难以覆盖全,最简单的方法如下:

JavaScript 

function htmlEncode(html) {
	//1.首先动态创建一个容器标签元素,如DIV
	var temp = document.createElement("div");
	//2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐,google支持)
	(temp.textContent != undefined) ? (temp.textContent = html) : (temp.innerText = html);
	//3.最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了
	var output = temp.innerHTML;
	temp = null;
	return output;
}
function htmlDecode(encodedHtml) {
	//1.首先动态创建一个容器标签元素,如DIV
	var temp = document.createElement("div");
	//2.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持)
	temp.innerHTML = encodedHtml;
	//3.最后返回这个元素的innerText(ie支持)或者textContent(火狐,google支持),即得到经过HTML解码的字符串了。
	var output = temp.innerText || temp.textContent;
	temp = null;
	return output;
}

Jquery

function htmlEncode(html) {
    return $("<div>").text(html).html();
};
function htmlDecode(encodedHtml) {
    return $("<div>").html(encodedHtml).text();
};

将上述方法封装为工具类

var HtmlUtil = {
	/*1.用浏览器内部转换器实现html转码*/
	htmlEncode: function (html) {
		//1.首先动态创建一个容器标签元素,如DIV
		var temp = document.createElement("div");
		//2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐,google支持)
		(temp.textContent != undefined) ? (temp.textContent = html) : (temp.innerText = html);
		//3.最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了
		var output = temp.innerHTML;
		temp = null;
		return output;
	},
	/*2.用浏览器内部转换器实现html解码*/
	htmlDecode: function (text) {
		//1.首先动态创建一个容器标签元素,如DIV
		var temp = document.createElement("div");
		//2.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持)
		temp.innerHTML = text;
		//3.最后返回这个元素的innerText(ie支持)或者textContent(火狐,google支持),即得到经过HTML解码的字符串了。
		var output = temp.innerText || temp.textContent;
		temp = null;
		return output;
	},
	/*3.用正则表达式实现html转码*/
	htmlEncodeByRegExp: function (str) {
		var s = "";
		if (str.length == 0)
			return "";
		s = str.replace(/&/g, "&amp;");
		s = s.replace(/</g, "&lt;");
		s = s.replace(/>/g, "&gt;");
		s = s.replace(/ /g, "&nbsp;");
		s = s.replace(/\'/g, "&#39;");
		s = s.replace(/\"/g, "&quot;");
		return s;
	},
	/*4.用正则表达式实现html解码*/
	htmlDecodeByRegExp: function (str) {
		var s = "";
		if (str.length == 0)
			return "";
		s = str.replace(/&amp;/g, "&");
		s = s.replace(/&lt;/g, "<");
		s = s.replace(/&gt;/g, ">");
		s = s.replace(/&nbsp;/g, " ");
		s = s.replace(/&#39;/g, "\'");
		s = s.replace(/&quot;/g, "\"");
		return s;
	}
};


 

相关标签: Encode Decode