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

 
web语言分为后台和前台,如果后台语言嵌入方式将字符串输出到前台语言中,需要按照前台语言的要求进行转义。
因为前台各个语言都有自身的保留字符, 用于规定自身的语法格式,如果后台字符串直接输出则可能会跟前台的语言的保留字符冲突。
 
 
具体分为以下三种:
 
1、 向HTML中输出,作为HTML标签对中的内容 或者 属性值字符串的内容输出, 
  如果输出的内容想原样展示,为了避免被HTML语言翻译错误,需要使用后台语言接口进行转义,
  一般名字叫  encodeHTML,
  将 HTML语法使用字符翻译为 HTML 实体:
例如 将 & 翻译为  
  1. <input value="<%=encodeHTML(name)%>">
  2.  
  3. ==>
  4.  
  5. <input value="&nbsp;">  <!-- 控件值显示为 一个 & -->
 
2、 向Javascript语言中输出,作为Javascript字符串的内容,
  对应字符串"XXX"中的XXX的全部或者部分内容,需要使用后台语言接口进行转义,
  一般名字叫encodeJS, 将后台字符串中的每一个字符转义为Javascript转义形式,
    例如 将 " 翻译为 \"
  1. var name = “<%=name%>”;
  2.  
  3. ==>
  4.  
  5. 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, 如下代码例子:
  1. <html>
  2. <head>
  3. <script type="text/javascript" src="./jquery/jquery-1.9.1.js"></script>
  4. </head>
  5. <body>
  6. <div id="test"></div>
  7. <div id="test1"></div>
  8. <input type="text" id="inputText">
  9. <script>
  10. $("#test").text("<div>aa<</div>")
  11. $("#test1").html($("#test").html() + "<div>OOOOO</div>")
  12. $("#inputText").val($("#test").html());
  13. </script>
  14. </body>
  15. </html>
 
JS反向decodeHTML操作,与上面操作相反:
  1. var decoded = $("<div/>").html(encodedStr).text();

  1. <html>
  2. <head>
  3. <script type="text/javascript" src="./jquery/jquery-1.9.1.js"></script>
  4. </head>
  5. <body>
  6. <div id="test"></div>
  7. <input type="text" id="inputText">
  8. <script>
  9. $("#test").html("&lt;<div>f</div>")
  10. $("#inputText").val($("#test").html()); //html arg
  11. $("#inputText").val($("#test").text()); // text in html DOM
  12. </script>
  13. </body>
  14. </html>
 原始的JS封装的 HTMLEncode 和 HTMLDecode 实现接口:
  1. <script type=”text/javascript”>
  2. function HTMLEncode(html)
  3. {
  4. var temp = document.createElement (“div”);
  5.  
  6. (temp.textContent != null) ?
  7. (temp.textContent = html) :
  8. (temp.innerText = html);
  9.  
  10. var output = temp.innerHTML;
  11. temp = null;
  12. return output;
  13. }
  14.  
  15. function HTMLDecode(text)
  16. {
  17. var temp = document.createElement(“div”);
  18. temp.innerHTML = text;
  19.  
  20. var output = temp.innerText || temp.textContent;
  21. temp = null;
  22. return output;
  23. }
  24.  
  25. var html = “<br>dffdfqqqqq”;
  26. var encodeHTML = HTMLEncode(html);
  27. alert(“方法一:” +encodeHTML);
  28.  
  29. var decodeHTML = HTMLDecode(encodeHTML);
  30. alert(“方法一:” +decodeHTML); </script>
 HTMLEnecode 还有只针对敏感参数转换的方法
http://www.cnblogs.com/ghd258/archive/2009/10/18/1274429.html
第二种方法,
但是此方法,改变的字符串的原始的编码的值,

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

  1. function HTMLEncode(str)
  2. {
  3. var transStr = "";
  4. for (var i=0; i<str.length; i++)
  5. {
  6. var charCode = str.charCodeAt(i);
  7. if ( charCode<127 )
  8. transStr += "&#"+charCode+";";
  9. else
  10. transStr += str.charAt(i);
  11. }
  12.  
  13. return transStr;
  14. }
 
 
 
 
 

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: 还是畅通工程-并查集-最小生成树-解题报

    还是畅通工程 Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 某省调查乡村交通 ...

  2. ZOJ 3703 Happy Programming Contest(DP)

    题目链接 输出路径,搞了一个DFS出来,主要是这里,浪费了好长时间. #include <cstdio> #include <string> #include <cstr ...

  3. SRM 595 DIV1 250

    挺简单的组合把. #include <cstdio> #include <cstring> #include <iostream> #include <vec ...

  4. Linux进程含义知多少

    理想情况下,您应该明白在您的系统中运行的每一个进程.要获得所有进程的列表,可以执行命令 ps -ef(POSIX 风格)或 ps ax(BSD 风格).进程名有方括号的是内核级的进程,执行辅助功能(比 ...

  5. Go语言练习:网络编程实例——简易图片上传网站

    1.代码结构 2.运行实例 1.代码结构 $ tree . ├── photoweb.go ├── public │   ├── css │   ├── images │   └── js ├── u ...

  6. 手机访问pc网站自动跳转手机端网站代码

    <SCRIPT LANGUAGE="JavaScript">function mobile_device_detect(url){        var thisOS= ...

  7. [LintCode] Happy Number 快乐数

    Write an algorithm to determine if a number is happy. A happy number is a number defined by the foll ...

  8. Struts2中上传图片案列

    1.HTML代码 <body> <!--上传一个文件   enctype="multipart/form-data" 上传文件必须设置这个属性和属性值--> ...

  9. 帝国备份王(Empirebak)万能cookie及拿shell

    1.伪造cookie登录系统(其实这一步多余的,大多用户连密码都没改,都是默认的123456) 登录成功设置4个cookie,看代码 function login($lusername,$lpassw ...

  10. CSS学起来并不难

    CSS CSS学起来并不难,但在大型项目中,就变得难以管理,特别是不同的人在CSS书写风格上稍有不同,团队上就更加难以沟通,为此总结了一些如何实现高效整洁的CSS代码原则: 1. 使用Reset但并非 ...