Mailto 中文主题乱码

来源:互联网 发布:程序员职业规划 知乎 编辑:程序博客网 时间:2024/06/04 19:14

这几天帮别人搞了一个newsletter.在处理mailto:?subject=中文的时候outlook显示乱码。

这个问题首先在我做网页的时候出现了一次.当时在网上找了一下,也没有深入分析过,就在页面的header部分把charset设置我gb2312,链接部分没有修改,还是原生的中文:

<a href=”mailto:xxx@hotmail.com?subject=欢迎参加博览会”>我要参加</a>

点击测试:我要参加

网页在IE中点击打开outlook的时候中文是OK的,但是Firefox不行。考虑到客户基本上不会使用Firefox,就偷懒没有分析下去。结果是该发生的一定要发生。。

上到邮件群发系统之后,邮件系统对页面的所有链接做了包装,成了:

<a href=”http://xxx.xxx.com/QWERFASDGQWERDafsd…”>我要参加</a>

点击之后会打开一个IE窗口,再随即重定向到outlook,显示主题是乱码。

百思不得其解,最后求救于邮件服务提供商的客服,解决方法很简单:

把中文主题拷贝到baidu搜索框搜索一下,再把url中wd=后面的%BB%B6%D3…拷贝替换就可以了。

baidu在发送URL到服务器时对中文部分进行了GBK编码。

以下是一段转载过来的浏览器处理URL的信息

URL的组成:
域名:端口/contextPath/servletPath/pathInfo?queryString

浏览器显示网页:
浏览器根据http头中的ContentType(“text/html; charset=GBK”),指定的字符集来解码服务器发送过来的字节流。

浏览器URL编码
URL中如果含有中文等非ASCII字符,则浏览器会对它们进行URLEncode。为了避免浏览器采用了我们不希望的编码,所以最好不要在URL中直接 使用非ASCII字符,而采用URL Encode编码过的字符串%.

1、GET方式提交,浏览器会对URL进行URL encode,然后发送给服务器。
(1) 对于中文IE,如果在高级选项中选中总以UTF-8发送(默认方式),则PathInfo是URL Encode是按照UTF-8编码,QueryString是按照GBK编码。
http://localhost:8080/example/中 国?name=中国
实际上提交是:
GET /example/%E4%B8%AD%E5%9B%BD?name=%D6%D0%B9%FA

(1) 对于中文IE,如果在高级选项中取消总以UTF-8发送,则PathInfo和QueryString是URL encode按照GBK编码。
实 际上提交是:
GET /example/%D6%D0%B9%FA?name=%D6%D0%B9%FA

(3) 对于中文firefox,则pathInfo和queryString都是URL encode按照GBK编码。
实际上提交是:
GET /example/%D6%D0%B9%FA?name=%D6%D0%B9%FA

很显然,不同的浏览器以及同一浏览器的不同设置,会影 响最终URL中PathInfo的编码。对于中文的IE和FIREFOX都是采用GBK编码QueryString。

点击测试:我要参加

CSDN 有一篇好文,详细讲述了URL编码:

http://blog.csdn.net/yzhz/archive/2007/07/03/1676796.aspx

原创粉丝点击