Mailto 中文主题乱码

这几天帮别人搞了一个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。

点击测试:我要参加

 

发表评论

邮箱地址不会被公开。 必填项已用*标注