简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中显示。

这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。
由于是纯前端操作,不涉及后端,因此需要通过js对输入内容进行转义。
这里提供一个非常简单有效的转义方案,利用了innerHTML和innerText
注:火狐不支持innerText,需要使用 textContent 属性,而IE早期版本不支持此属性,为了同时兼容IE及火狐,需要进行判断操作.
因为innerText(textContent)会获取纯文本内容,忽略html节点标签,而innerHTML会显示标签内容,
所以我们先将需转义的内容赋值给innerText(textContent),再获取它的innerHTML属性,这时获取到的就是转义后文本内容。
代码如下:
function HTMLEncode(html) {
var temp = document.createElement("div");
(temp.textContent != null) ? (temp.textContent = html) : (temp.innerText = html);
var output = temp.innerHTML;
temp = null;
return output;
}
var tagText = "<p><b>123&456</b></p>";
console.log(HTMLEncode(tagText));//<p><b>123&456</b></p>
通过测试结果,可以看到html标签及&符都被转义后保存。
同理,反转义的方法为先将转义文本赋值给innerHTML,然后通过innerText(textContent)获取转义前的文本内容
function HTMLDecode(text) {
var temp = document.createElement("div");
temp.innerHTML = text;
var output = temp.innerText || temp.textContent;
temp = null;
return output;
}
var tagText = "<p><b>123&456</b></p>";
var encodeText = HTMLEncode(tagText);
console.log(encodeText);//<p><b>123&456</b></p>
console.log(HTMLDecode(encodeText)); //<p><b>123&456</b></p>
编码反编码核心函数
function html_encode(str)
{
var s = "";
if (str.length == 0) return "";
s = str.replace(/&/g, "&");
s = s.replace(/</g, "<");
s = s.replace(/>/g, ">");
s = s.replace(/ /g, " ");
s = s.replace(/\'/g, "'");
s = s.replace(/\"/g, """);
s = s.replace(/\n/g, "<br/>");
return s;
}
function html_decode(str)
{
var s = "";
if (str.length == 0) return "";
s = str.replace(/&/g, "&");
s = s.replace(/</g, "<");
s = s.replace(/>/g, ">");
s = s.replace(/ /g, " ");
s = s.replace(/'/g, "\'");
s = s.replace(/"/g, "\"");
s = s.replace(/<br\/>/g, "\n");
return s;
}
console.log(html_decode('<div>123</div>'));
console.log(html_encode(html_decode('<div>123</div>')));
实例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
function html_encode(str)
{
var s = "";
if (str.length == 0) return "";
s = str.replace(/&/g, "&");
s = s.replace(/</g, "<");
s = s.replace(/>/g, ">");
s = s.replace(/ /g, " ");
s = s.replace(/\'/g, "'");
s = s.replace(/\"/g, """);
s = s.replace(/\n/g, "<br/>");
return s;
}
function html_decode(str)
{
var s = "";
if (str.length == 0) return "";
s = str.replace(/&/g, "&");
s = s.replace(/</g, "<");
s = s.replace(/>/g, ">");
s = s.replace(/ /g, " ");
s = s.replace(/'/g, "\'");
s = s.replace(/"/g, "\"");
s = s.replace(/<br\/>/g, "\n");
return s;
}
console.log(html_decode('<div>123</div>'));
console.log(html_encode(html_decode('<div>123</div>')));
</script>
</head>
<body>
</body>
</html>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# js
# HTML转义
# HTML反转义
# JS及JQuery对Html内容编码
相关文章:
制作公司内部网站有哪些,内网如何建网站?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
建站主机选购指南:核心配置优化与品牌推荐方案
如何在IIS7中新建站点?详细步骤解析
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何在万网自助建站平台快速创建网站?
如何快速上传自定义模板至建站之星?
如何通过NAT技术实现内网高效建站?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
建站之星如何实现网站加密操作?
常州自助建站工具推荐:低成本搭建与模板选择技巧
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
如何在阿里云域名上完成建站全流程?
如何在阿里云ECS服务器部署织梦CMS网站?
建站主机SSH密钥生成步骤及常见问题解答?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
建站之星客服服务时间及联系方式如何?
中山网站制作网页,中山新生登记系统登记流程?
建站主机是什么?如何选择适合的建站主机?
如何在服务器上三步完成建站并提升流量?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
建站之星安装步骤有哪些常见问题?
Java解压缩zip - 解压缩多个文件或文件夹实例
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
如何安全更换建站之星模板并保留数据?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
c++怎么用jemalloc c++替换默认内存分配器【性能】
广东专业制作网站有哪些,广东省能源集团有限公司官网?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
简历在线制作网站免费版,如何创建个人简历?
建站之星与建站宝盒如何选择最佳方案?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
c# 在ASP.NET Core中管理和取消后台任务
小建面朝正北,A点实际方位是否存在偏差?
如何通过网站建站时间优化SEO与用户体验?
潮流网站制作头像软件下载,适合母子的网名有哪些?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
,柠檬视频怎样兑换vip?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
制作营销网站公司,淘特是干什么用的?
小型网站制作HTML,*游戏网站怎么搭建?
在线教育网站制作平台,山西立德教育官网?
建站主机选哪家性价比最高?
非常酷的网站设计制作软件,酷培ai教育官方网站?
如何自定义建站之星模板颜色并下载新样式?
如何快速上传建站程序避免常见错误?
*请认真填写需求信息,我们会在24小时内与您取得联系。