免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3591 | 回复: 3
打印 上一主题 下一主题

ie 和 Mojolicious的问题,以及相关编码的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-02 13:15 |只看该作者 |倒序浏览

用IE访问以下URL,显示结果正常
http://localhost:3000/s?q=%E5%BC%A0%E4%BC%9F

用IE访问以下URL,直接报错
http://localhost:3000/s?q=张伟

直接报: HTTP 400 - Bad Request

是mojo的bug? 还是mojo需要作URL显式转换?




另外

mojo如何互转编码?
例如:
/s?q=%E5%BC%A0%E4%BC%9F

# mojo能自动转换URL编码
say $self->param('q'); # 张伟

# 但貌似反向转换后结果不一致
use Mojo::Util qw(url_escape);
say url_escape('张伟'); # %5F20%4F1F

# 而不是输出需要的%E5%BC%A0%E4%BC%9F

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
2 [报告]
发表于 2014-05-02 19:08 |只看该作者
检查一下是 GB2312 还是 UTF8

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2014-05-02 19:40 |只看该作者
1. mojo不需要做url转换。中文URL无论是什么浏览器都没遇到过问题
2. 你说的“反向转换后结果不一致”,可能是因为你文件是GB2312的,url_escape('张伟'); 得到的结果和浏览器显示是一致的。如果怀疑的话可以用URI::Escape模块检测

论坛徽章:
0
4 [报告]
发表于 2014-05-02 22:35 |只看该作者
本帖最后由 QQ1921961 于 2014-05-02 22:38 编辑

可能我没讲明白,用一个小实例来说明问题吧。

  1. #!/usr/bin/perl

  2. use Mojolicious::Lite;

  3. get '/' => 'home';

  4. get '/s' => sub {
  5.   my $self = shift;
  6.   my $q  = $self->param('q');
  7.   $self->render(text => "Hello from $q.");
  8. };

  9. app->start;

  10. __DATA__
  11. @@ home.html.ep
  12. <h1>URI escaped: (中文会由Mojo自动转换)</h1>
  13. <%= link_to 张三  => '/s?q=张三' %>.
  14. <%= link_to 李四 => '/s?q=李四' %>.

  15. <h1>URI unescaped: (中文不作转换)</h1>
  16. <a href="/s?q=张三">张三</a>
  17. <a href="/s?q=李四">李四</a>
复制代码
这里特指IE6/IE9环境下访问出的问题,
其它浏览器如firefox都正常,firefox本身会对访问的URL不规范字符部分自动编码。

IE访问第一行的张三和李四链接是没问题的,
但第二行就直接报400错误了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP