`

ajax中post的escape扩展方法

    博客分类:
  • coos
阅读更多

ajax中post的escape对有些特殊字符无法转换,例如:+ %号,因此需要对其进行扩展,由于ajax提交比较多,需要转换的字符比较多,实时性比较强,所以对应转换效率要求比较高。

以下是经过思考后完全使用正则表达式的方式实现的,代码非常简单,效率应该很高了。

 

coos.ajax.encodeString = function(str)
{
	if (str == null || str == "")
	{
		return str;
	}
	var value = escape(str);
	//替换+号为%2B
	value = value.replace(/\+/g, "%2B");
	//替换%号为%25如"%u2a2a dfd %u1f1f";替换后为%25u2a2a dfd %25u1f1f
	value = value.replace(/%u([0-9A-F]{4})/ig,function(word){return escape(word);});
	
	return value;
};

 

 

 

以前别人的一个做法,用了while循环substring match等,效率虽然感觉不出来,但看那代码就觉得很不舒服,杀伤了不少脑细胞才理解透彻后改为上面简单的正则表达式方式:

 

coos.ajax.encodeString = function (str)
{
	if (str == null || str == "")
		return str;
	
	var ret = "";
	var value = escape(str);
	var match, re = /%u([0-9A-F]{4})/i;
	
	value = value.replace(/\+/g, "%2B");
	
	while((match = value.match(re)))
	{
		ret += value.substring(0, match.index) + escape("%u") + match[1];
		value = value.substring(match.index+match[0].length);
	}
	
	ret += value;
	
	return ret;
}

 

经过测试encodeURIComponent 不对'单引号进行编码对/进行编码
不能满足要求,encodeURI不对+号进行和'单引号进行编码也不能满足要求

下面是测试代码:

<script type="text/javascript">
	var str = "a b+x%uacsd中文!@=)(+\\~`/.';'.d";
	var str1 = encodeURI(str);
	alert("str1= " + str1);

	var str2 = encodeURIComponent(str);
	alert("str2= " + str2);

	var value = escape(str);
	value = value.replace(/\+/g, "%2B");
	value = value.replace(/%u([0-9A-F]{4})/ig,function(value){return escape(value);});
	alert("value2= " + value);

	if(str2 == value)
	{
		alert(true);
	}
</script>

 

分享到:
评论
3 楼 zdz8207 2009-07-24  
经过测试encodeURIComponent 不对'单引号进行编码对/进行编码
不能满足要求,encodeURI不对+号进行和'单引号进行编码也不能满足要求
2 楼 zdz8207 2009-07-24  
kjj 写道
decodeURI()不行吗!!,我记得用decode可以!!

刚查了下文档:
encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。请使用 encodeURIComponent 方法对这些字符进行编码。
encodeURIComponent 方法
将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。

encodeURIComponent(encodedURIString)

必选的 encodedURIString 参数代表一个已编码的 URI 组件。

说明
encodeURIComponent 方法返回一个已编码的 URI。如果您将编码结果传递给 decodeURIComponent,那么将返回初始的字符串。因为 encodeURIComponent 方法对所有的字符编码,请注意,如果该字符串代表一个路径,例如 /folder1/folder2/default.html,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到 web 服务器时将是无效的。如果字符串中包含不止一个 URI 组件,请使用 encodeURI 方法进行编码。

1 楼 kjj 2009-07-24  
decodeURI()不行吗!!,我记得用decode可以!!

相关推荐

    php+ajax注册验证

    3. **发送请求**:调用`open()`方法设置请求类型(GET/POST)、URL和是否异步,然后使用`send()`方法发送数据。 4. **接收响应**:在`onreadystatechange`事件中,当`readyState`为4且`status`为200时,表示请求成功...

    ajax suggest

    - **请求发送**:使用`ajax_xmlhttp.send("sift_value="+escape(temp_value));`向服务器发送包含用户输入内容的请求。 - **响应处理**:根据服务器返回的数据更新下拉列表。 ##### 2. HTML/CSS部分 - **样式设置**...

    AJAXCALL

    2. 在 `test3` 函数中,使用 `postform` 作为表单 ID,调用 `AJAXFORM` 方法提交表单。 3. 指定回调函数为 `yoyo3`,以及扩展参数 `attach` 的值为 `showContent`。 4. `yoyo3` 函数的具体实现未给出,但通常会处理...

    学习内容day1------表单的处理

    GET方法的数据会显示在URL中,而POST方法则将数据隐藏在请求体中,对于敏感信息通常推荐使用POST。 在PHP端,我们使用`$_POST`或`$_GET`全局数组来获取表单数据。例如,如果HTML表单有一个名为`username`的输入字段...

    实现类似facebook无刷新ajax更新

    需要注意的是,上述代码示例中使用了已废弃的`mysql_*`函数集,考虑到安全性与性能,推荐使用`mysqli`或`PDO`扩展。此外,为了进一步提高安全性,SQL语句应当使用参数化查询来防止SQL注入。 综合以上内容,实现类似...

    Jquery+Ajax+PHP+MySQL实现分类列表管理(下)

    这里,我们从POST请求中获取ID和标题,对标题进行解码和转义以防止SQL注入,然后执行更新数据库的SQL查询。如果查询成功,返回1表示成功;否则,返回0表示失败。 总结来说,这个实现的关键在于利用Ajax和JSON技术,...

    PHP实例开发源码-在线实时更新留言板 php版.zip

    用户在前端填写留言后,通过HTTP POST方法提交数据到服务器。PHP将处理这些POST数据,例如使用`$_POST`全局数组来获取表单字段值。然后,这些数据会被用来创建新的留言记录或更新已有记录。 4. 实时更新: "在线...

    PHP+mysql+jQuery说说留言板

    例如,使用`$.ajax()`或`$.post()`方法向服务器发送异步请求,获取新的留言并动态插入到页面上。 - 还可以利用jQuery实现一些视觉效果,如淡入淡出、滚动加载更多留言等。 4. **前端交互**: - 用户界面通常包含...

    PHP实例开发源码—FFS5-Mini v120731 最终版 php网络文件存储分享系统.zip

    这些接口通常遵循RESTful原则,使用HTTP方法如GET、POST、PUT和DELETE来操作资源。 综上所述,FFS5-Mini v120731 最终版是一个涵盖了众多PHP开发技术的项目,从基础的文件操作到复杂的用户认证、数据库交互,再到...

    简单留言板

    - 使用PHP的`PDO`(PHP Data Objects)或者`mysqli`扩展连接到数据库,执行INSERT语句,将新留言保存到`messages`表中。 - 提交成功后,可以使用`header()`函数重定向回`index.php`,刷新页面显示最新的留言列表。 ...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    (XML取消了所有标识,包括font,color,p等风格样式定义标识,因此XML全部是采用类似DHTML中CSS的方法来定义文档风格样式。),XML中用来设定显示风格样式的文件类型有: 1.XSL XSL全称是Extensible Stylesheet ...

    database-php.rar_WEB开发_PHP_

    在上述示例中,`$_POST[province_id]`应使用预处理语句或`mysqli_real_escape_string`进行处理。 6. **前端交互**:前端可能还需要处理其他交互细节,如默认选项、错误提示、加载指示器等,以提供更好的用户体验。 ...

    firstchatpietro

    在聊天应用中,这通常涉及到POST请求来发送消息,GET请求来获取新消息。 2. **数据库交互**:为了存储和检索聊天记录,PHP通常会与MySQL等关系型数据库配合。它使用SQL语句来创建、读取、更新和删除(CRUD)数据。 ...

Global site tag (gtag.js) - Google Analytics