这几天帮别人搞了一个newsletter.在处理mailto:?subject=中文的时候outlook显示乱码。
这个问题首先在我做网页的时候出现了一次.当时在网上找了一下,也没有深入分析过,就在页面的header部分把charset设置我gb2312,链接部分没有修改,还是原生的中文:
<a href=”mailto:[email protected]?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。
点击测试:我要参加