代码说

code is poetry

代码说    
碎碎念:如果你眼睛看白色的背景时间太长感觉疲劳的话,试试点击“阅读模式”会好很多!  换一换

表单提交之后地址栏中的参数自动进行转码

作者:coderzheng 发布于:2014-3-27 19:52 Thursday 分类:javascript  阅读模式

论坛上有人问如何实现百度搜索框中的中文转码。

需求是这样的,在百度搜索框中输入“申通”,回车,页面显示如下:


我们看到,搜索页的ur链接中用红色部分框住的部分就是已经转码过的中文。

接下来我们实现一个类似的效果:

HTML端:

PHP端:

在HTML页面输入中文点击Submit或者Btn按钮,页面自动跳转到php页面,下面是一个实际的测试案例:

跳转页面结果:

我们看到,经过php的urldecode函数处理之后,字符串被正确还原成了中文。

回到那段javascript代码:

function redirect() {
href = "test_36.php?key="+encodeURI(document.getElementById('input1').value);
	location.href = encodeURI(href);
	return false;
}

这里我们使用了两次encodeURI函数,原因是:在FF和Chrome浏览器中,如果只使用一次encodeURI函数,浏览器会自动将已经转码的中文字符串解码。即原本已经转码的字符串又被还原成了中文。这种情况在IE下不会发生。

当然两次处理过的字符串和一次处理过的字符串肯定是不一样的,看一下IE下面的运行结果就知道了:

但是这并不会影响最后的结果。字符串还是能被php的urldecode函数正确还原成中文。

补充:

(1) javascript中除了encodeURI函数外,其实还有另外两个函数也可以用来进行编码:escape和encodeURIComponent。这三个函数的区别和用法可以浏览这个网页:http://qbaty.iteye.com/blog/1140870

(2) 其实百度使用的是escape函数进行编码,用escape处理的时候不需要对字符串进行两次escape,一次即可。但是用escape编码的时候有一个问题,就是在php端,必须自定义函数来处理被escape函数编码过的字符串(php函数库中没有相关函数)。

标签: javascript uri中文编码

你可以发表评论、引用到你的网站或博客,或通过RSS 2.0订阅这个博客的所有文章。
上一篇: 为什么要为项目文件夹配置虚拟主机  |  下一篇:apache下的url rewrite技术详解