WindowsPhone Webbrowser 表单提交的编码问题

环境:WindowsPhone7的包,要适配WindowsPhone7和WindowsPhone8

最近搞webbrowser加载一个类似于意见反馈的网页显示在WindowsPhone7的客户端里面,想想挺简单的活,估了大概3天,没想到前前后后加起来却花费了1周的时间。(接上一篇WindowsPhone Webbrowser 加载cookie的问题

今天解决的一个问题是表单提交的编码问题。因为这个意见反馈的后台php页面ios,Android已经在使用,所以原则上尽量少修改后台的php页面,在html表单页面和客户端做到兼容。

而后台php做的事情就是用gbk编码接收post数据,然后对数据进行保存处理,最后会返回一个utf-8编码的内容给客户端。

为了满足此种情况,在ios和Android的html里面用了以下的方法:

贴出一下网页的head的编码和表单的情况

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<form id="form1" action="http://test/suggestion.php" method="post" style="display:inline" accept-charset="gbk" onsubmit="return false;">

很明显,页面是utf-8格式的(当然文件也是utf-8格式保存的,否则乱码),然后表单设置了accept-charset='gbk'。页面显示是utf-8,而提交表单是gbk 。

这样的设置在ios和Android里面,并没有问题,表单提交和显示都是正常的。

但是到了WindowsPhone的webbrowser里面,这样做在用户提交成功之后,后台php返回一个内容显示在页面上时却出现了乱码(经测试Window8 和wp7,8手机 IE都是乱码)。

然后就去截包,截取到url的参数,用百度urlencoding在线小工具转换,结果如下:

      

也就是说,post请求提交表单的时候是以utf-8的方式提交的,并不是gbk。这个跟ios和Android并不一样,难道IE不支持accept-charset?

但是查询了w3schools 的accept-charset,明确写着支持所有的浏览器

但不起作用又是为什么呢?经过仔细的搜索,终于在 stackoverflow 上发现了一篇帖子

这哥们跟我遇到的问题差不多,他是想要把utf-8的页面用"ISO-8859-1"编码来提交表单。然后下面有各种精彩的解决方案:

被标记为Answers的解决方案我有去试验,但是没有解决。他描述了IE表单提交的时候如何确认post的编码,在表单里面放一个隐藏的input,放入一个html entity,ie检测到这个entity是utf-8的code,就是把他转化为utf-8。但是恕在下愚昧,没能找到gbk的html entity。

但是下面有一条回复,引起了我的兴趣:

这位老兄说:IE用accept-charset只是备用,基本上不会去使用这个属性,因此他不建议去使用或者干脆不用。(这就解释我前面的问题,明明IE支持accept-charset却不起作用)。

他还提出解决方案:要想改变form的编码只有改变页面的charset或者用iframe。

小结:最后我还是说服php后台给我WindowsPhone平台做了特殊的处理,解决了编码的问题(并没有采用上述的任意一种方式),只是这样一个简单功能却延伸出无限的知识点,以后IE加载网页乱码问题应该注意以下几点(不知道是否适用于其他浏览器):

1、html header设置的编码要跟html文件编码一致,否则整个页面显示乱码

2、IE默认打开的是html header设置的编码

3、表单提交时候的编码跟文件编码保持一致

posted @ 2013-03-21 17:07  (_灬絶℡情乄  阅读(391)  评论(0编辑  收藏  举报