`
thrillerzw
  • 浏览: 143815 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

escape函数解决参数乱码

 
阅读更多

解决url或get方式传递中文参数时候,乱码问题。

 

格式:escape(中文字符串) 

 

url时候需要escape  2次,因为浏览器会解一次码。

get方式提交form只需要一次。

 

 

	var searchCityName=escape(escape(searchCityName));
	var url="http://xxx?add="+searchCityName;
	window.location.href=url;

 结果:

地址栏:http://xxx?add=%25u4E2D%25u56FD%253A%25u5E7F%25u4E1C%25u7701%253A%25u4E1C%25u839E%25u5E02

java服务端:%u4E2D%u56FD%3A%u5E7F%u4E1C%u7701%3A%u4E1C%u839E%u5E02 

说明浏览器转了一次。

 

 

			var value=escape(value);
			jQuery("#add").val(value);
			jQuery('#searchForm').submit();
html:
  <form id="searchForm" name="searchForm" method="get" action="$url">    
    <input type="hidden" name="add" id="add"  value="$!addEscape" />
  </form>

 

 结果:页面/java服务端:%u4E2D%u56FD%3A%u5E7F%u4E1C%u7701%3A%u4E1C%u839E%u5E02

 

      String  add = StringUtils.unescape(request.getParameter("add"));

       /**
	 * javascript unescape()的java实现
         */
	public static String unescape(String s) {
		StringBuffer sbuf = new StringBuffer();
		int i = 0;
		int len = s.length();
		while (i < len) {
			int ch = s.charAt(i);
			if (ch == '+') { // + : map to ' '
				sbuf.append(' ');
			} else if ('A' <= ch && ch <= 'Z') { // 'A'..'Z' : as it was
				sbuf.append((char) ch);
			} else if ('a' <= ch && ch <= 'z') { // 'a'..'z' : as it was
				sbuf.append((char) ch);
			} else if ('0' <= ch && ch <= '9') { // '0'..'9' : as it was
				sbuf.append((char) ch);
			} else if (ch == '-'
					|| ch == '_' // unreserved : as it was
					|| ch == '.' || ch == '!' || ch == '~' || ch == '*'
					|| ch == '\'' || ch == '(' || ch == ')') {
				sbuf.append((char) ch);
			} else if (ch == '%') {
				int cint = 0;
                if ((i+2)<len && 'u' != s.charAt(i+1)) {         // %XX : map to ascii(XX)
                    cint = (cint << 4) | val[s.charAt(i+1)];
                    cint = (cint << 4) | val[s.charAt(i+2)];
                    i+=2;
                } else { 
	                if(i+5<len){
	                	// %uXXXX : map to unicode(XXXX)
	                    cint = (cint << 4) | val[s.charAt(i+2)];
	                    cint = (cint << 4) | val[s.charAt(i+3)];
	                    cint = (cint << 4) | val[s.charAt(i+4)];
	                    cint = (cint << 4) | val[s.charAt(i+5)];
	                    i+=5;
                	}else{
                		return s;
                	}
                }
                sbuf.append((char)cint);
			}
			i++;
		}
		return sbuf.toString();
	}



       /**
	 * javascript escape()的java实现
         */
	public static String escape(String s) {
		StringBuffer sbuf = new StringBuffer();
		int len = s.length();
		for (int i = 0; i < len; i++) {
			int ch = s.charAt(i);
			if (ch == ' ') { // space : map to '+'
				sbuf.append('+');
			} else if ('A' <= ch && ch <= 'Z') { // 'A'..'Z' : as it was
				sbuf.append((char) ch);
			} else if ('a' <= ch && ch <= 'z') { // 'a'..'z' : as it was
				sbuf.append((char) ch);
			} else if ('0' <= ch && ch <= '9') { // '0'..'9' : as it was
				sbuf.append((char) ch);
			} else if (ch == '-'
					|| ch == '_' // unreserved : as it was
					|| ch == '.' || ch == '!' || ch == '~' || ch == '*'
					|| ch == '\'' || ch == '(' || ch == ')') {
				sbuf.append((char) ch);
			} else if (ch <= 0x007F) { // other ASCII : map to %XX
				sbuf.append('%');
				sbuf.append(hex[ch]);
			} else { // unicode : map to %uXXXX
				sbuf.append('%');
				sbuf.append('u');
				sbuf.append(hex[(ch >>> 8)]);
				sbuf.append(hex[(0x00FF & ch)]);
			}
		}
		return sbuf.toString();
	}

 

 

escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。语法escape(string)参数描述string必需。要被转义或编码的字符串。返回值已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。说明该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。

提示和注释提示:可以使用 unescape() 对 escape() 编码的字符串进行解码。注释:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。

 

 

分享到:
评论

相关推荐

    js escape,unescape解决中文乱码问题的方法.docx

    了解这些基本概念和实践技巧后,开发者可以更有效地解决JavaScript中的中文乱码问题,无论是使用`escape`和`unescape`,还是选择更适合的URI编码方法。同时,关注相关的技术文章和社区讨论,可以帮助持续学习和掌握...

    escape --AJAX和JS传中文乱码的最终解决方案

    本文将深入探讨如何使用"escape"函数以及相关的编码策略来解决AJAX和JS传中文乱码的问题。 首先,我们需要理解AJAX(异步JavaScript和XML)的工作原理。AJAX允许网页在不重新加载整个页面的情况下与服务器交换数据...

    escape函数解决js中ajax传递中文出现乱码问题

    本文实例讲述了escape函数解决js中ajax传递中文出现乱码问题,分享给大家供大家参考。具体方法如下: 一、问题描述: 本来网页特效中的escape()是将中文按iso-8859-1字符集进行url编码的,那样通过 request....

    js中文乱码问题分析及解决方案.docx

    escape函数可以对传入的字符串进行转义编码,但它不适合对URL进行编码。unescape函数可以对转义编码的字符串进行解码。 2. encodeURI/decodeURI函数 encodeURI函数可以对整个URL进行编码,而decodeURI函数可以对...

    jquery+asp ajax 中文乱码问题解决文档

    ### jQuery + ASP AJAX 中文乱码问题解决方案 在开发基于jQuery和ASP的Web应用程序时,中文乱码问题可能成为困扰开发者的一大难题。特别是在使用Ajax进行前后端数据交互时,中文字符可能会出现乱码现象,影响用户...

    js escape,unescape解决中文乱码问题的方法

    总之,`escape`和`unescape`是JavaScript中处理字符串编码解码的两个基本工具,它们在特定场景下能帮助我们解决中文乱码问题。但在现代Web开发中,考虑到兼容性和效率,我们通常会使用更专业的方法来处理字符串编码...

    java 中文乱码 处理

    本文将介绍几种解决Java中中文乱码的方法,希望能对您有所帮助。 #### 方法一:转换请求参数编码 在Java Web开发中,客户端通过HTTP请求向服务器传递数据时,如果数据中有中文字符,很容易出现乱码问题。这是因为...

    SqlServer数据库中文乱码问题解决方法

    4. JavaScript中传递URL参数的中文内容需使用`escape`函数。 5. 存储UTF-8编码的中文内容到SQL Server时,字段类型应为`NVARCHAR`,插入时在值前加上`N`,如`INSERT INTO user (name) VALUES (N'&username&')`。 在...

    escape编码与unescape解码汉字出现乱码的解决方法

    总的来说,解决`escape`和`unescape`处理汉字乱码问题的关键在于理解和维护字符编码的正确性,以及合理使用JavaScript提供的字符串编码和解码函数。通过确保整个流程中编码的统一性和正确性,可以避免乱码的出现。

    asp.net页面通过URL参数传值中文乱码问题解决办法

    在Asp.Net开发中,遇到页面通过URL参数传递中文字符时出现乱码是...以上就是解决Asp.Net页面通过URL参数传递中文乱码问题的详细方法,通过选择合适的方法或组合使用这些方法,可以确保中文字符在URL中正确无误地传递。

    Ajax中文乱码问题解决方法

    本文将深入探讨Ajax中文乱码问题的原因及其解决方案。 首先,我们需要理解Ajax乱码的根源。当JavaScript发送HTTP请求时,如果服务器和客户端之间关于字符编码的约定不一致,就会导致乱码。常见的原因包括: 1. **...

    url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介

    通过上述代码,我们可以看到使用`encodeURIComponent()`函数可以确保URL中的中文字符被正确编码,从而避免了乱码问题的发生。 总之,在实际开发中,根据不同的需求选择合适的编码函数是非常重要的。通过正确使用...

    解析php中的escape函数

    escape函数主要用于对字符串进行编码,确保字符串在不同环境下传输或显示时不会出现问题。在PHP中,escape函数常用于URL编码,即把字符串转换为百分号编码(percent-encoded),以确保在URL中的有效性和安全性。 ...

    Asp中用法JQuery的AJAX提交中文乱码解决方法_.docx

    在Asp中使用JQuery的AJAX提交中文乱码解决方法主要是在客户端使用escape()函数编码中文字符,而在服务器端使用VbsEscape()和VbsUnEscape()函数来编码和解码中文字符。通过这种方法,可以避免中文乱码问题,实现正确...

    jquery ajax传递中文参数乱码问题及解决方法说明

    在`url`参数中,我们使用`escape()`函数对中文参数进行了编码,以确保它们在网络传输过程中保持正确格式。 编码过程如下: ```javascript url: "ajaxpage.aspx?t=smrz&name=" + escape(name) + "&zjtype=" + ...

    地址栏传递中文参数乱码在js里用escape转码

    当我们在Web开发中遇到URL地址栏传递中文参数出现乱码的问题时,一个常见的解决办法是使用JavaScript中的escape函数进行转码。这个函数能够将字符串中的中文字符转换为一个十六进制形式的URL编码字符串。在某些...

    PHP向mysql插入中文乱码问题,php文件内容写入数据库!

    以下将详细分析并解决PHP向MySQL插入中文乱码问题,以及如何正确处理PHP文件内容写入数据库。 首先,我们需要确保数据库的编码设置正确。MySQL数据库通常使用UTF-8编码,因此创建数据库和表时应指定`CHARACTER SET ...

Global site tag (gtag.js) - Google Analytics