2012-12-22 22 views
0

我正在做一个测试,Firefox编码字符如何。浏览器编码URL的行为是什么?

但事实让我困惑。

HTML代码:

<html lang="zh_CN"> 
<head> 
<title>some Chinese character</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
<img src="http://localhost/xxx" /> 
</body> 

的xxx是一些中国字。这些字符必须编码为像%xx这样的格式才能通过HTTP传输。

首先,我用UTF-8编码源文件。使用Firefox来打开HTML文件。 img标签将发送一个请求,“xxx”字符由UTF8编码。

  • (通过UTF8编码HTML源文件,字符集= UTF8,由UTF浏览器的编码URL)

我改变了元成 <meta http-equiv="Content-Type" content="text/html; charset=gbk"> ,但什么都没有改变。

  • 编码由UTF8,字符集= GBK,通过UTF浏览器编码的URL的HTML源文件)

第二,我保存在ANSI,也许GBK或GB2312的源文件。

当charset = gbk时,仍然使用UTF8编码字符。

  • (由GBK,字符集= GBK,通过UTF浏览器编码URL 编码HTML源文件)

BUT,当字符集= UTF8,字符通过GBK分别编码。顺便说一句,其他汉字不能以正确的方式显示,例如标题中的字符串。

  • (由GBK,字符集= UTF8编码的HTML源文件,通过GBK浏览器的编码URL)

如何控制浏览器的编码行为?

+0

我做了这个测试,因为在强制浏览器的URL编码为utf8时遇到了问题,我改变了字符集,但没有发生任何事情,所以我认为还有其他任何我不了解的浏览器编码的URL? –

回答

2

对于URL编码,UTF-8是the standard。如果您以GBK身份对源文件进行物理编码,但在内容类型中使用utf-8,那么您只是对浏览器说谎,并且会得到不一致或不可用的结果。

当一个新的URI方案定义了表示文本数据 由来自通用字符集[UCS]字符的部件,所述 数据应首先根据UTF-8 字符编码编码为八位字[ STD63];那么只有那些不是 对应于无保留集中的字符的字节应该是百分号- 编码的。例如,字符A将被表示为“A”, 字符LATIN CAPITAL LETTER A WITH GRAVE将被表示为 作为“%C3%80”,并且字符KATAKANA L字母A将被表示为 作为“%E3% 82%A2

+0

我改变了我的方法,直接打印编码的网址到网页。谢谢你的回答。 –

+0

嗯,严格地说RFC 3986在使用UTF-8时只使用“should”,所以标准确实允许异常。实际上至少所有的现代浏览器都会进行编码网址为UTF-8。 – sleske

相关问题