一个网站最好采用同一种编码,但是有些特殊情况下,可能会遇到一个网站不同的页面需要不同编码的情况,就有可能会遇到中文乱码的问题。我前段时间就遇到了这样一个问题,经过几天的反复试验,问题终于解决了,现在总结一下,如果有人遇到同样的问题,希望能有所帮助。
先说一下我遇到的问题:
1、 前段时间做了一个淘宝店铺导购网站,淘引擎
http://www.taoyinqing.com 。现在淘宝推出了TOP 开发函数,可以调用提供的API函数,读取淘宝数据。
2、 Top函数需要对传递的参数在UTF-8编码的MD5加密,我以前的网站是GB2312编码的,我也不想把所有的编码都转换成utf-8编码。这样就会出现一个网站两种编码的情况,一个是gb2312编码,一个是utf-8编码。
3、 ASP默认的MD5加密是GB2312编码下的,中文加密后和UTF-8下加密的不一致,这个是需要解决的问题。
4、 我的页面需要从一个gb2312编码的页面传递中文参数到UTF-8编码的页面。直接传递会出现乱码,这个是需要解决的问题。
好了,问题出现了,下面介绍问题解决方式。
一个网站两种编码方式的解决方式:
在Utf-8程序页面的第一行加上
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%Session.CodePage=65001%>
在GB2312程序页面的第一行加上
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%Session.CodePage=936%>
MD5中文加密解决方式:
*保证ASP文件本身的内容是UTF-8或者ANSI编码过的。
*对非URL保留字符进行URL编码(如中文字符,时间,等)。
*对响应结果使用UTF-8编码进行读取
*为响应页面加上UTF-8响应头
从gb2312编码的页面传递中文参数到UTF-8编码的页面解决方式:
这个是最麻烦的地方,因为直接传递参数的话不论是直接传递还是URL编码都是乱码,因为GB2312字符,中文占2字节,而utf-8是3到4字节。所以编码后的结果和解码后的数据都不一致。
既然直接传递不可以,我就想看能不能做一个中间页来接收参数,编码后传递到utf-8编码的页面。实际测试的时候发现还是有问题,会出现乱码,我的解决方式是先用GB2312编码接收参数,然后设置页面为utf-8编码,对接收的参数进行URL编码,在跳转到utf-8页面。
下面是我用的实际例子,需要从gb2312编码的页面
http://www.taoyinqing.com/list.asp?cateid=16 传递中文参数查询关键字到utf-8页面
http://www.taoyinqing.com/top.asp?keyword=%E7%A7%92%E6%9D%80&cid=16&start_price=&end_price=
中间先由第一个页面把参数提交到一个中间页面top_url.asp,代码如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%Session.CodePage=936%>
<%
keyword=request.form("keyword")
cid=request.form("cid")
start_price=request.form("start_price")
end_price=request.form("end_price")
Session.CodePage=65001
keyword_url=server.URLEncode(keyword)
Response.Charset="utf-8"
response.Write("正在查询,请稍后.....")
%>
<script>
window.location="top.asp?keyword=<%=keyword_url%>&cid=<%=cid%>&start_price=<%=start_price%>&end_price=<%=end_price%>";
</script>
这样我们就能很好的解决一个网站多种编码和MD5中文加密的问题。
版权所有,转载请注明 淘引擎
http://www.taoyinqing.com