【原创】ASP中同一个网站两种编码及MD5中文加密解决方案

leshui 2010-03-30 12:55:05
一个网站最好采用同一种编码,但是有些特殊情况下,可能会遇到一个网站不同的页面需要不同编码的情况,就有可能会遇到中文乱码的问题。我前段时间就遇到了这样一个问题,经过几天的反复试验,问题终于解决了,现在总结一下,如果有人遇到同样的问题,希望能有所帮助。
先说一下我遇到的问题:
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
...全文
181 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
porschev 2010-03-30
  • 打赏
  • 举报
回复
没人帮顶。。。。我来人工置顶一把。。。上去

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧