`

HTML、JS、JSON特殊字符

阅读更多

JS到HTML特殊字符转换

这几天做项目,发现从服务器端以JSON格式将数据传递到客户端后,通过JS显示在HTML页面时,有一些特殊字符不能直接显示,如后台传递过来的是 '<b>msg</b>&nbsp;&#35;' 通过JS显示在HTML页面中时,显示成了 msg # ,并不是<b>msg</b>&nbsp;&#35;,这是由于<与>之间的内容看作是HTML标签了,而以&开头的&nbsp;&#35;为HTML实体,所以显示不正常。

 

解决办法很简单,在JS将其渲染到HTML页面前转换一下即可:

 

 

<html>
<body>
<div id="div1" ></div>
<div id="div2" ></div>
<script >
var str = '<b>msg</b>&nbsp;&#35;';
document.all.div1.innerHTML='<pre>'+str+'</pre>';

//js中的字符串正常显示在HTML页面中
String.prototype.displayHtml= function(){
	//将字符串转换成数组
	var strArr = this.split('');
	//HTML页面特殊字符显示,空格本质不是,但多个空格时浏览器默认只显示一个,所以替换
	var htmlChar="&<>";
	for(var i = 0; i< str.length;i++){
		//查找是否含有特殊的HTML字符
		if(htmlChar.indexOf(str.charAt(i)) !=-1){
			//如果存在,则将它们转换成对应的HTML实体
			switch (str.charAt(i)) {						
				case '<':
					strArr.splice(i,1,'&#60;');
					break;
				case '>':
					strArr.splice(i,1,'&#62;');
					break;
				case '&':
					strArr.splice(i,1,'&#38;');
			}
		}
	}
	return strArr.join('');
}
alert(str.displayHtml());
document.all.div2.innerHTML=str.displayHtml();

</script>
</body>
</html>

 

上面在赋给div之前没有转换,所以显示不正常,第二个div显示正常,显示结果如下:



 

JSP到HTML特殊字符转换

以上是通过JS将后台传递过来的数据显示在页面之前的转换,有时是通过JSP生成HTML页面内容,此时的特殊字符会比上面多,另外此时的转换需要通过服务器端转换后再输出到HTML页面。如 jsp页面在生成HTML时如下:
<input type='txt' value='<%=msg %>'>
如果 msg 为 I'am> 时,第一页面会乱,第二文本框中显示的值不正确


  。这是由于HTML标签属性值可以使用双引号也可使用单引号,如果HTML使用的是单引号,而值中也包含单引号时,就会出现问题,双引号同样也有这样的问题,由于大都数情况下,页面中属性使用双引号还是单引号没有规范下来,所以服务器端传递来的单引号与双引号都需要转换。另外像<、>就不用说了,也是需要转换的,所以此种情况下应该至少 <>"'& 这5个需要特殊转换。
	// HTML字符转换表
	public final static Map<String, String> HTML_CHAR = new HashMap<String, String>();
	static {
		HTML_CHAR.put("&", "&#38;");		
		HTML_CHAR.put("\"", "&#34;");
		HTML_CHAR.put("<", "&#60;");
		HTML_CHAR.put(">", "&#62;");	
		HTML_CHAR.put("'", "&#39;");		
	}

	public static final StringBuilder toHTMLChar(String str) {
		if (str == null) {
			return new StringBuilder();
		}		
		StringBuilder sb = new StringBuilder(str);

		char tempChar;
		String tempStr;
		for (int i = 0; i < sb.length(); i++) {
			tempChar = sb.charAt(i);
			if (HTML_CHAR.containsKey(Character.toString(tempChar))) {
				tempStr = (String) HTML_CHAR.get(Character
						.toString(tempChar));
				sb.replace(i, i + 1, tempStr);
				i += tempStr.length() - 1;
			}
		}
		return sb;
	}
 在输出到HTML之前使用上面的toHTMLChar(msg).toString()转换一下即可:

 

Java到JSON特殊字符转换

由于从服务器后端生成JSON格式的字符串,最后传递到客户端由 eval() 函数动态的生成Javascript,如果JSON字符串格式错误,则eval解析会出错,经常也是最常出错的是 " ' \r\n  这三个字符,如 {name:'I'am'}解析时会出错,同样,由于JavaScript中的字符串可由单引号也可由双引号引起来,所以双引号一样也有这样问题。另外,字符串是不能跨行写的,即你不能写成这样:{name:"I'

am"}

所以这3个需要转换,另外换行可能依赖于平台,所以 \n 也需要转换,比如我们需要将后台抛出的异常栈信息以JSON的格式传回到浏览器上显示时,就需要将回车换行转换。代码如下:

 

		response.setContentType("application/json");
		
		Writer wr = response.getWriter();
		
		if(exceptionTrace.indexOf("'")!=-1){
			//将单引号转义一下,因为JSON串中的字符串类型可以单引号引起来的
			exceptionTrace = exceptionTrace.replaceAll("'", "\\'");
		}
		if(exceptionTrace.indexOf("\"")!=-1){
			//将双引号转义一下,因为JSON串中的字符串类型可以单引号引起来的
			exceptionTrace = exceptionTrace.replaceAll("\"", "\\\"");
		}
		
		if(exceptionTrace.indexOf("\r\n")!=-1){
			//将回车换行转换一下,因为JSON串中字符串不能出现显式的回车换行
			exceptionTrace = exceptionTrace.replaceAll("\r\n", "\\u000d\\u000a");
		}
		if(exceptionTrace.indexOf("\n")!=-1){
			//将换行转换一下,因为JSON串中字符串不能出现显式的换行
			exceptionTrace = exceptionTrace.replaceAll("\n", "\\u000a");
		}
		
		wr.write("{success:false,exception:true,msg:'" +exceptionTrace + "'}");
		wr.flush();
		wr.close();

 

 

  • 大小: 2.9 KB
  • 大小: 1.6 KB
  • 大小: 1.8 KB
分享到:
评论
1 楼 daofeng1983 2012-12-25  
感觉还不错,学习下。

相关推荐

    彻底根治Spring @ResponseBody JavaScript HTML特殊字符

    在开发Web应用时,我们经常会遇到一个问题:当使用Spring MVC的`@ResponseBody`注解将后端处理结果直接转化为HTTP响应体时,如果这个结果中包含HTML特殊字符,如尖角号、引号、按位与符号等,浏览器可能会误解析,...

    json3.js字符解析转换

    `json3.js`是一个兼容性极强的JavaScript库,旨在为那些不完全支持ECMAScript 5的浏览器提供完整的JSON解析和字符串化功能。它包括了`JSON.parse()`和`JSON.stringify()`的实现,以及其他一些扩展的功能。这个库使得...

    一个用于将JSON数据转换为Table的JavaScript库

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。在前端开发中,我们经常需要将从服务器获取的JSON数据展示在网页的表格中,以便用户直观地查看和操作数据。...

    JSON资源包,有JS和JAVA包

    3. `json_parse_state.js`、`json_parse.js`、`json_sans_eval.js`:这些可能是JSON解析器的不同实现,可能包含了一些特殊处理或者优化。比如`json_sans_eval.js`很可能是一个避免使用`eval()`的JSON解析器,以确保...

    Json_decode 解析json字符串为NULL的解决方法(必看)

    HTML实体是一种在HTML文档中用来表示特殊字符的方式,例如`&amp;`表示`&`符号。如果JSON字符串中含有HTML实体,`json_decode()`无法将其正确解析为PHP数据类型,因此需要先转换。 2. 使用`stripslashes()`函数:该...

    JS特殊字符处理

    4. **JSON格式**:在JSON(JavaScript Object Notation)中,所有的字符串都必须使用双引号包围,并且特殊字符同样需要转义。例如,`{"name": "Tom's cat"}`是无效的JSON,应该写为`{"name": "Tom\'s cat"}`。 5. *...

    将web Form 的数据转化成json字符串及json对象进行处理的JS

    在给定的文件中,`Form2Json.htm`可能是包含HTML表单的网页,而`Form2Json.js`则可能是一个JavaScript脚本,实现了上述的转换逻辑。在实际应用中,这样的脚本通常会在表单提交之前运行,将表单数据转换为JSON格式,...

    如何处理JSON中的特殊字符

    在处理HTML特殊字符时,常见的问题是当JSON字符串被嵌入到HTML页面中时,某些特殊字符会被浏览器解释为HTML代码,从而导致显示不正确。例如,字符"和"&gt;"被解释为HTML标签的开始和结束,而"&"则被解释为HTML实体的...

    老版本PHP转义Json里的特殊字符的函数

    正因为它的格式要求严格,所以字符串中的特殊字符必须进行转义以避免破坏JSON结构。 在本文中,作者分享了一个PHP函数,这个函数用于将字符串中的特殊字符转义,以满足JSON格式的要求。尽管这个方法对于PHP 5.2及...

    解析html为json数据结构适用与微信小程序richtext

    在实际开发中,可能还需要处理一些特殊情况,比如处理嵌套的标签、处理属性(如`class`或`href`)、转义特殊字符等。这些都需根据实际需求进行定制。 最后,将解析后的JSON数据传递给`rich-text`组件。在微信小程序...

    处理ajax返回带有换行的json数据

    JSON规范要求数据应该是有效的JavaScript语法,这意味着JSON字符串不能包含某些特殊字符,包括未经转义的换行符。在JSON字符串中,换行通常应被转义为`\n`。如果从Ajax请求中接收到的JSON数据包含了未转义的换行符,...

    将html里表格解析为json形式

    在实际项目中,可能还需要考虑其他因素,如处理表头、忽略空值、处理特殊字符等。对于复杂的表格结构,可能需要更高级的解析逻辑。此外,前端与后端的数据交互通常通过API进行,所以理解RESTful API和HTTP请求也是必...

    使用JavaScript构建JSON格式字符串实现步骤

    接着,`$.toJSON(request)`将整个`request`对象转换为JSON字符串,`encodeURIComponent(jsonfy)`函数用于编码特殊字符,以确保数据在发送到服务器时不会被错误地解析。 最后,使用Ajax调用`post_data(url, ...

    asp_json_JSON_asp实现json编码_

    2. **准备数据**:数据可能需要进行一些预处理,例如日期格式化、特殊字符转义等,以确保符合JSON规范。 3. **创建JSON编码函数**:如果你使用的是ASP内建对象,可以使用ScriptControl对象的ExecuteMethod方法,...

    【JS相关问题处理】 正则表达式解决JS取值被过滤掉引号的方法

    例如,如果字符串中包含特殊字符或数字,正则表达式需要相应调整以避免误匹配。 通过以上方法,我们可以有效地解决JavaScript中取值时引号被过滤掉的问题。在实际应用中,应根据具体场景选择合适的方法,并注意测试...

    JS实现将二维数组转为json格式字符串操作示例

    如果传入参数是字符串,就对其进行转义处理,将特殊字符转换为Unicode转义序列,然后用双引号包围起来。如果传入的是对象(在JavaScript中数组也是一种对象),则进一步检查该对象是否有序。如果是有序的,将对象的...

    奇葩json 数据 解析

    1. **清理非JSON字符**:非正式的JSON数据可能包含特殊字符,如单引号、HTML标签等,这些字符在JSON规范中是不允许的。我们需要使用正则表达式或其他方法替换或移除这些字符。 2. **转义特殊字符**:在JSON中,双...

    1.17 JavaScript高级-JSON和DOM操作.pdf

    在 JSON 中,不支持 JavaScript 中的特殊 undefined。 2. JSON 对象 JSON 对象的表示法需要加上双引号,并且不存在赋值运算和分号。例如:`var box = { "name": "Hou", "age": 100 };` 3. JSON 数组 JSON 数组的...

    JSON客户端与服务器端生成JSON数据及传递方法

    字符串需要用双引号包围,特殊字符需要转义。例如,一个简单的JSON字符串如下: ```json "abc" ``` 数字的表示方式与大多数编程语言相同,如整数和浮点数: ```json 12345 -3.9e10 ``` 布尔值仅包含`true`和`...

    jsoncheck验证数据是否为json数据

    - **特殊字符**:JSON不允许包含控制字符或某些特殊字符,如反斜杠(\)需要转义,`jsoncheck`会检测并报告任何不合法的字符。 使用`jsoncheck`这样的工具,可以极大地提高处理JSON数据时的效率和准确性,避免由于...

Global site tag (gtag.js) - Google Analytics