JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解...

转:http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526687.html

//该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。 
//其他字符(比如 :;/?:@&=+$,#
var tDT_Start =$("#DT_Start").val().replace(/:/g,'|'); //将:替代为|,传到后台再转换回来
var tDT_End =$("#DT_End").val().replace(/:/g,'|');
解析:字符串要匹配正则/:/g,将符合条件的替换为|

C#后台
tDT_Start= tDT_Start.Replace("|", ":");

javaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 。

下面简单介绍一下它们的区别

1 escape()函数

定义和用法
escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。

语法
escape(string)

参数  描述 
string  必需。要被转义或编码的字符串。 

返回值
已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。

说明
该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。

MVC3
页面js:

var url = URL +"?startDT="+ escape($("#StartDT").val();//时间

在action中,
{
string dt = Server.UrlDecode(startDT);
}


2 encodeURI()函数
定义和用法
encodeURI() 函数可把字符串作为 URI 进行编码。

语法
encodeURI(URIstring)

参数  描述 
URIstring  必需。一个字符串,含有 URI 或其他要编码的文本。 

返回值
URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。

说明
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#

 


3 encodeURIComponent() 函数

定义和用法
encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。

语法
encodeURIComponent(URIstring)

参数  描述 
URIstring  必需。一个字符串,含有 URI 组件或其他要编码的文本。 

返回值
URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。

说明
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

提示和注释
提示:请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。

示例可参考:http://blog.csdn.net/zyu67/article/details/43951653 

 

4 总结:

 通过对三个函数的分析,我们可以知道:escape()除了 ASCII 字母、数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法。而encodeURI() 用于编码整个URI,因为URI中的合法字符都不会被编码转换。encodeURIComponent方法在编码单个URIComponent(指请求参 数)应当是最常用的,它可以讲参数中的中文、特殊字符进行转义,而不会影响整个URL。

 

相关:JS、C#编码解码

转载于:https://www.cnblogs.com/xcsn/archive/2013/05/15/3079373.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(JAVA)CollectionDemo1

package cn.cast.collection;import java.util.ArrayList; import java.util.Collection;/*** author zhangyu* date 2021年08月22日 10:19 下午* 使用集合添加add()* 使用集合移除,返回boolean值*/ public class CollectionDemo {public static void main(String[]…

林俊卿咽音练声法八个步骤(纯净版视频加图文)(转)

原文链接:http://zgwhyyj.blog.sohu.com/81794726.html 读原著一直是研究者提倡的正确获得原创资料及其精神方法的一种最佳方式!观察了“土豆”和“我乐”、“新浪”等网站中关于“林俊卿咽音练声法八个步骤”的视频,内容中穿插的“经历、荣誉、传人”等…

(JAVA)CollectionDemo2

package cn.cast.collection;import java.util.ArrayList; import java.util.Collection;/*** author zhangyu* date 2021年08月23日 11:02 下午* Collection接口中,带有All的方法* removeAll,containsAll,addAll,retainAll* 返回值:调用者集合发生改变返…

(JAVA)CollectionDemo3

package cn.cast.collection;import com.sun.tools.jdi.EventSetImpl;import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;/*** author zhangyu* date 2021年08月24日 11:40 下午* 获取Collectuon 接口有一个方法* Iterator iterator()* 返回…

VS 2012 找回消失的“创建单元测试”

日前,看到91哥的分享,聽說,建立單元測試的選單回來了!!! 得知這消息真的又驚又喜,馬上就照著以下步驟實作一次。 http://serena-yeoh.blogspot.tw/2013/02/visual-studio-2012-create-unit-test.html 不過在動手實作的時候&#x…

(JAVA)集合Collection3

package cn.cast.collection;/*** author zhangyu* date 2021年08月28日 4:12 下午* 使用集合存储自定义对象,并迭代* 在迭代器中,next()在运行中,不能添加对象,且不能多次使用*/ import cn.book.objectarr.Student;import java.u…

状态目标bfs+哈希表 + 三杯水

本篇文章是一篇关于状态目标的帖子 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间互相倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。当初要求你写出一个程序&#x…

(JAVA)泛型

package cn.cast.collection;import java.util.ArrayList; import java.util.Iterator;/*** author zhangyu* date 2021年08月29日 7:43 下午* 泛型:jdk中的泛型为伪泛型* 在编译时期有效,解决安安全问题*/ public class test {public static void main(…

(JAVA)List

package cn.cast.collection;import cn.book.objectarr.Student;import java.util.ArrayList; import java.util.Iterator;/*** author zhangyu* date 2021年08月29日 4:25 下午* 去掉ArrayList 集合中重复元素* List 允许重复* 1.底层可变数组* 2.默认10个位置* 3.每次增加505…

【零基础学习iOS开发】【02-C语言】05-进制

上一讲简单介绍了常量和变量,这讲补充一点计算机的基础知识---进制。 我们先来看看平时是如何表示一个整数的,最常见的肯定是用阿拉伯数字表示,比如“十二”,我们可以用12来表示,其实这种表示方式是基于一种叫做“十进…

(JAVA)可变参数

package cn.cast.collection;/*** author zhangyu* date 2021年09月13日 11:52 下午* 1.可变参数* 2.参数类型指定,参数各个数不确定* 3.修饰符 返回值类型 方法名(数据类型...变量名){}* 4.本质是数组* 5.注意事项:* 可变参…

prictice

package cn.cast.collection;import java.util.*;/*** author zhangyu* date 2021年08月29日 7:43 下午* 泛型:jdk中的泛型为伪泛型* 在编译时期有效,解决安安全问题*/ public class test {public static void main(String[] args) { // ArrayLis…

NetworkOnMNetworkOnMainThreadException

这个异常大概意思是在主线程访问网络时出的异常。 Android在4.0之前的版本 支持在主线程中访问网络,但是在4.0以后对这部分程序进行了优化,也就是说访问网络的代码不能写在主线程中了。 用多线程可解决: 1 new Thread(){ 2 …

实现注册登录

package com.logein;/*** author alina* date 2021年09月15日 10:49 下午* User类,封装用户信息的类*/ public class User {//保存用户名private String username;//保存用户密码private String passwoer;public User() { }public User(String username,String pass…

字符串循环同构的最小表示法(转)

循环字符串的最小表示法的问题可以这样描述: 对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。 由于语言能力有限,还是用实际例子来解释比较容易:设Sbcad,且S’是S的循环同构的串。S’可以是bcad或者cad…

(JAVA)set

package cn.cast.collection;import java.util.HashSet; import java.util.Iterator; import java.util.Set;/*** author Alina* date 2021年09月16日 11:08 下午* Set 接口派系特点* 不允许存储重复元素* 无序集合,不保证迭代顺序* 没有索引** Set集合迭代方式…