`

2011-08-16 18:29 JS中三种编码方式(escape,encodeURI,encodeURIComponent)

阅读更多

一 参考书 

0 http://hi.baidu.com/suofang/item/970a2ba6ea271cda5bf191ea
1  js编码http://blog.csdn.net/cnartstorm/archive/2009/06/23/4292460.aspx 
2 js 解决中文乱码函数-js中escape,encodeURI,encodeURIComponent三个函数的区别 
  http://blog.csdn.net/renhui15688/archive/2009/01/06/3710569.aspx 
二 各函数说明 
js对文字进行url编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 

A:  escape(String) 

escape函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。 
返回值:已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。 
说明:方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。提示和注释 
提示:可以使用 unescape() 对 escape() 编码的字符串进行解码。 
注释:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。 

B:encodeURI(string) 

定义:把字符串作为 URI 进行编码 
返回值: URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。 
说明: 该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。 
该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,# 
提示和注释: 提示:如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent() 方法分别对各组件进行编码。 

C:encodeURIComponent 

返回值:URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。 
说明:该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。 
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。 
提示和注释: 
提示:请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 

encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号. 

三 示例 
工程,JSP页面编码使用UTF-8时,用js中的方法escape('中')进行编码,在java中要用EscapeUnescape.java进行解码,见附件,另外上传了,html,css3,W3school文档及编码的js文件,JS编码.zip 

  • JS编码比较.zip (16.2 KB)
  • 下载次数: 8
    public static String escape(String src) {
    
    		int i;
    
    		char j;
    
    		StringBuffer tmp = new StringBuffer();
    
    		tmp.ensureCapacity(src.length() * 6);
    
    		for (i = 0; i < src.length(); i++) {
    
    			j = src.charAt(i);
    
    			if (Character.isDigit(j) || Character.isLowerCase(j)
    
    			|| Character.isUpperCase(j))
    
    				tmp.append(j);
    
    			else if (j < 256) {
    
    				tmp.append("%");
    
    				if (j < 16)
    
    					tmp.append("0");
    
    				tmp.append(Integer.toString(j, 16));
    
    			} else {
    
    				tmp.append("%u");
    
    				tmp.append(Integer.toString(j, 16));
    
    			}
    
    		}
    
    		return tmp.toString();
    
    	}
    
    	public static String unescape(String src) {
    
    		StringBuffer tmp = new StringBuffer();
    
    		tmp.ensureCapacity(src.length());
    
    		int lastPos = 0, pos = 0;
    
    		char ch;
    
    		while (lastPos < src.length()) {
    
    			pos = src.indexOf("%", lastPos);
    
    			if (pos == lastPos) {
    
    				if (src.charAt(pos + 1) == 'u') {
    
    					ch = (char) Integer.parseInt(src
    
    					.substring(pos + 2, pos + 6), 16);
    
    					tmp.append(ch);
    
    					lastPos = pos + 6;
    
    				} else {
    
    					ch = (char) Integer.parseInt(src
    
    					.substring(pos + 1, pos + 3), 16);
    
    					tmp.append(ch);
    
    					lastPos = pos + 3;
    
    				}
    
    			} else {
    
    				if (pos == -1) {
    
    					tmp.append(src.substring(lastPos));
    
    					lastPos = src.length();
    
    				} else {
    
    					tmp.append(src.substring(lastPos, pos));
    
    					lastPos = pos;
    
    				}
    
    			}
    
    		}
    
    		return tmp.toString();
    
    	}
     
分享到:
评论

相关推荐

    JS中三种编码方式(escape,encodeURI,encodeURIComponent)

    本文将详细探讨三种主要的编码方法:`escape()`, `encodeURI()`, 和 `encodeURIComponent()`,并解释它们之间的区别和应用场景。 首先,`escape()` 方法并不常用于现代Web开发,但它仍然是JavaScript内置的一个函数...

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

    ### URL的三个JS编码函数:`escape()`, `encodeURI()`, `encodeURIComponent()` 简介 在Web开发中,经常遇到的一个问题是URL传递中文字符时出现乱码的情况。为了解决这一问题,JavaScript提供了几种不同的编码方法...

    java中文乱码之解决URL中文乱码问题的方法

    在Java开发中,遇到中文乱码问题是一种常见的挑战,特别是在处理URL时。URL中文乱码问题主要是由于URL编码和解码过程中的不一致导致的。下面将详细介绍如何解决这个问题,并探讨几种常用的方法。 首先,我们需要...

    javascript 字符 Escape,encodeURI,encodeURIComponent

    本文将详细介绍`escape()`、`encodeURI()`和`encodeURIComponent()`这三个函数,并解释它们的区别和使用场景。 首先,`escape()`方法是JavaScript最早提供的一个编码函数,它基于ISO Latin字符集对字符串进行编码。...

    javascript url几种编码方式详解

    2. encodeURI()是javascript中真正用来对URL编码的函数。编码整个URL地址,但对特殊含义的符号”;/?:@&=+$,#”,也不进行编码。对应的解码函数是decodeURI()。 3. encodeURIComponent()能编码”;/?:@&=+$,#”这些...

    【JavaScript源代码】基于网址URL中特殊字符转义编码.docx

    - **Unicode字符的编码方式**:`encodeURIComponent()`比`encodeURI()`对Unicode字符的处理更全面,可以编码更多的Unicode字符。 - **适用场合不同**:`encodeURIComponent()`常用于编码URL查询参数,`encodeURI()`...

    utf-8解码小程序

    UTF-8是一种可变长度的Unicode字符编码方式,它能兼容ASCII并支持世界上几乎所有的字符集。在Web开发中,UTF-8是最常用的字符编码之一,因为它可以高效地存储和传输多语言文本。 ### 2. URL编码与解码 URL编码(也...

    javascript 三种编解码方式

    编码和解码操作主要涉及三对函数:escape与unescape、encodeURI与decodeURI、encodeURIComponent与decodeURIComponent。下面详细解释每一对函数的功能及使用场景。 1. escape函数与unescape函数 escape函数用于对...

    jsp传参特殊字符

    该函数同样遵循URL编码的标准,并且支持自定义编码方式。 #### 4. 实际应用场景与示例 假设我们需要通过URL传递一个包含特殊字符“#”的参数,如`...

    js中unicode转码方法详解.docx

    JavaScript(简称JS)是一种广泛用于前端开发的轻量级脚本语言,它处理字符串时经常需要进行Unicode编码和解码。Unicode是一种国际标准,旨在表示世界上几乎所有的字符和符号,确保在不同系统间数据的兼容性。在JS中...

    JS对字符串编码的几种方式使用指南

    `escape()`方法将所有非ASCII码的字符进行转码,但是它并不编码URI的特殊字符,且对中文字符的编码方式与其他两个方法不同。 总结来说,选择合适的方法进行字符串编码取决于你的具体需求。如果需要编码整个URI,...

    js编码之encodeURIComponent使用介绍(asp,php)

    `encodeURI`函数是一种更为通用的编码方式,它提供了比`escape`更广泛的字符编码支持。`encodeURI`函数不会对ASCII字母、数字、`- _ ! # $ & ' ( ) * + , - . / : ; = ? @ ~`这82个字符进行编码,但是会将其它非英语...

    javascript类型系统 Window对象学习笔记

    - `escape()`: 使用16进制序列对字符串进行编码,现已不推荐使用,但对于编码cookie中的非法字符仍有其用处。 - `unescape()`: 解码由`escape()`方法编码的字符串。 编码方法的选择取决于具体的应用场景。一般情况...

    详谈js对url进行编码和解码(三种方式的区别)

    在JavaScript中,有三种主要的函数可以完成URL的编码和解码操作:escape(), encodeURI(), 和encodeURIComponent()。 escape() 函数是最古老的一种编码方式,尽管现在不推荐使用,但由于历史原因仍在一些地方使用。...

Global site tag (gtag.js) - Google Analytics