后台字符串嵌入前台语言输出

 
web语言分为后台和前台,如果后台语言嵌入方式将字符串输出到前台语言中,需要按照前台语言的要求进行转义。
因为前台各个语言都有自身的保留字符, 用于规定自身的语法格式,如果后台字符串直接输出则可能会跟前台的语言的保留字符冲突。
 
 
具体分为以下三种:
 
1、 向HTML中输出,作为HTML标签对中的内容 或者 属性值字符串的内容输出, 
  如果输出的内容想原样展示,为了避免被HTML语言翻译错误,需要使用后台语言接口进行转义,
  一般名字叫  encodeHTML,
  将 HTML语法使用字符翻译为 HTML 实体:
例如 将 & 翻译为  
<input value="<%=encodeHTML(name)%>">

==>

<input value="&nbsp;">  <!-- 控件值显示为 一个 & -->
 
2、 向Javascript语言中输出,作为Javascript字符串的内容,
  对应字符串"XXX"中的XXX的全部或者部分内容,需要使用后台语言接口进行转义,
  一般名字叫encodeJS, 将后台字符串中的每一个字符转义为Javascript转义形式,
    例如 将 " 翻译为 \"
var name = “<%=name%>”;

==>

var name = "\"";
3、 向XML数据格式中输出,需要类似HTML转义的接口,使用也相同。
  一般取名为 encodeXML 
负责如下XML常用字符转义:

字符

转义字符

描述

&

&amp;

<

&lt;

小于号

>

&gt;

大于号

"

&quot;

双引号

'

&apos;

单引号

 
 
 

DOM API (text & HTML)

 
在前台语言中,主要是HTML 和 JS之间:
1、如果使用JS在DOM节点中,原样显示文本内容,需要将此字符串设置到DOM节点的innerText 或者 textContent (firefox);
2、字符串包括合法html标签,并且作者就是想使用这些字符串改变DOM的内容,需要将此字符串设置到DOM节点的innerHTML属性。
 
两者使用场景需要明确,不能误用。
不能将需要原样输出的使用innerHTML属性设置,否则,对于用户可修改的参数,万一其被修改为合法的HTML语言,则页面展示为HTML元素,此为XSS攻击提供了漏洞。
也不能将需要按照HTML染显示的字符串,使用文本节点属性设置,给用户显示显示HTML代码是显然的不合理的,程序员例外(例如博客园的代码展示区)。
 
上面所说的两种DOM API,对应JQuery的html() 和 text()。
 
 
Javascript操作HTML DOM也牵扯到HTML转义事情,例如想组织一个字符串输出到html接口,
此字符串中含有需要原样输出的内容,还包括需要按照HTML渲染显示的字符串,
可以使用JQuery接口组合使用来完成,实现功能类似后台语言中的encodeHTML, 如下代码例子:
<html>
<head>
<script type="text/javascript" src="./jquery/jquery-1.9.1.js"></script>
</head>
<body>
<div id="test"></div>
<div id="test1"></div>
<input type="text" id="inputText">
<script>
$("#test").text("<div>aa<</div>")
$("#test1").html($("#test").html() + "<div>OOOOO</div>")
$("#inputText").val($("#test").html());
</script>
</body>
</html>
 
JS反向decodeHTML操作,与上面操作相反:
var decoded = $("<div/>").html(encodedStr).text();

<html>
<head>
<script type="text/javascript" src="./jquery/jquery-1.9.1.js"></script>
</head>
<body>
<div id="test"></div>
<input type="text" id="inputText">
<script>
$("#test").html("&lt;<div>f</div>")
$("#inputText").val($("#test").html()); //html arg
$("#inputText").val($("#test").text()); // text in html DOM
</script>
</body>
</html>
 原始的JS封装的 HTMLEncode 和 HTMLDecode 实现接口:
<script type=”text/javascript”>
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;
} function HTMLDecode(text)
{
var temp = document.createElement(“div”);
temp.innerHTML = text; var output = temp.innerText || temp.textContent;
temp = null;
return output;
} var html = “<br>dffdfqqqqq”;
var encodeHTML = HTMLEncode(html);
alert(“方法一:” +encodeHTML); var decodeHTML = HTMLDecode(encodeHTML);
alert(“方法一:” +decodeHTML); </script>
 HTMLEnecode 还有只针对敏感参数转换的方法
http://www.cnblogs.com/ghd258/archive/2009/10/18/1274429.html
第二种方法,
但是此方法,改变的字符串的原始的编码的值,

下面补充一个,保持转换字符编码值的方法:

function HTMLEncode(str)
{
var transStr = "";
for (var i=0; i<str.length; i++)
{
var charCode = str.charCodeAt(i);
if ( charCode<127 )
transStr += "&#"+charCode+";";
else
transStr += str.charAt(i);
} return transStr;
}
 
 
 
 
 

WEB语言转义总结的更多相关文章

  1. WASM 成为 HTML、CSS 与 JS 之后的第 4 门 Web 语言

    大家都知道,万维网联盟 W3C 认证的 Web 语言有 HTML.CSS 与 JavaScript,而近日联盟正式宣布 WebAssembly 核心规范(WebAssembly Core Specif ...

  2. web语言发展史

    引用自CSDN,地址:https://blog.csdn.net/moshenglv/article/details/51590830 提到Web,不得不提一个词就是“互联网”.Web是World W ...

  3. [label][转载][paypal]paypal在线支付接口的WEB语言设置

    http://stephen830.iteye.com/blog/274072 ★★★ 本篇为原创,需要引用转载的朋友请注明:< http://stephen830.iteye.com/blog ...

  4. C语言转义字符相关知识

    在C语言里所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示.而C中定义了一些字母或数字前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称 ...

  5. django模板语言转义处理

    模板变量的内容,如果含html的话,django的模板系统默认会对输出进行转义,比如把<p>转义成了<p> ,然后再显示出来的时候就如实地显示为<p>.要解决这个问 ...

  6. [HeadFrist-HTMLCSS学习笔记][第一章Web语言:开始了解HTML]

    head title body 元素= 开始标记 + 内容 +结束标记 还能给段落一个变量名 <p id="houseblend"> body </p> s ...

  7. 逐浪web无障碍与国际化以及全民族语言支持白皮书

    北京时间2019年5月10日,领先的门户网站与WEB内核服务厂商--上海Zoomla!逐浪CMS团队发布其年度重榜产品:逐浪CMS全民族语言与国际版,体验站点:http://demo2.z01.com ...

  8. C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路

    C#不用union,而是有更好的方式实现   用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...

  9. 【web开发 | 移动APP开发】 Web 移动开发指南(2017.01.05更新)

    版本记录 - 版本1.0 创建文章(2016.12.30) - 版本1.1 更正了hybird相关知识:增加了参考文章(2017.01.05): + Web APP更正为响应式移动站点与页面,简称响应 ...

随机推荐

  1. ACM 寻找最大数

    寻找最大数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=920813467185 ...

  2. ACM: POJ 3660 Cow Contest - Floyd算法

    链接 Cow Contest Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Descri ...

  3. 洛谷 P1033 自由落体 Label:模拟&&非学习区警告

    题目描述 在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,….n-1.在地面上有一个小车(长为 L,高为 K,距原点距离为 S1).已知小球下落距离计算公式为 d=1/2*g* ...

  4. JSP 基础概念归纳 5分钟看完

    1. 符合 j2ee 标准的 web-app 的目录结构 WEB-INF classes web.xml lib servlet 开发过程 从 httpservlet 继承, 重写 doget / d ...

  5. CodeForces 670D1 暴力或二分

    今天,开博客,,,激动,第一次啊 嗯,,先来发水题纪念一下 D1. Magic Powder - 1   This problem is given in two versions that diff ...

  6. DataGridView 的单元格的边框、 网格线样式的设定【转】

    1) DataGridView 的边框线样式的设定DataGridView 的边框线的样式是通过 DataGridView.BorderStyle 属性来设定的. BorderStyle 属性设定值是 ...

  7. png,jpg,gif格式的图片的选择

    gif:在使用动画的时候,例如加载页面时显示的预加载. png与jpg的区别: 1.png可以透明,jpg不能透明,所以需要透明的地方,必须用png.2.png是无损保存,多次保存都不会影响图片质量: ...

  8. 在python 中is和= = 的区别

    Python中的对象包含三要素:id.type.value其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值is判断的是a对象是否就是b对象,是通过id来判断的==判断的是a对 ...

  9. prim算法

    最小生成树 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边.最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法 ...

  10. FCM算法

    FCM算法是一种基于划分的聚类算法,它的思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小.模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,而FCM则 ...