搜索框和表单中的中文/日文字符

时间:2010-03-17 00:34:37

标签: javascript unicode encoding localization cjk

为什么当我使用Firefox输入:时,GET将转换为:

q=%E6%BC%A2&start=0

但是,当我使用IE8并输入相同的中文字符时,GET为:

q=?&start=0

它把它变成了一个问号。

3 个答案:

答案 0 :(得分:5)

将页面编码标记为UTF-8,此问题将消失。如果没有此提示,Firefox将无法自动检测您的编码。并且您可能已经在IE中手动更改了一次编码,因此这将成为未标记页面的新默认值。

将此内容放入<HEAD>

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

如果您的内容不是真正的UTF-8,那么您需要使用其他方法。 FORM上有一个html属性,暗示IE要将非ANSI代码页字符作为UTF-8发送,但使用正确的内容类型要好得多。

此外,地址栏可能不是查看结果文本的最佳位置,因为我上次检查时,它无法可靠地处理非ACP字符。确保您查看实际的请求数据。

如果您正在谈论在浏览器中的地址栏或搜索框中输入文本而不是特定的网页,我不会在英语Windows 7上重现此问题。也许您使用的是旧版本Windows和您的系统ANSI代码页不包含该字符; Win95 / Win98 / WinME当然会遇到这个问题。

编辑添加: 在IE 8中,输入您在包含此内容的页面上指定的字符对我来说完全符合预期。我和Fiddler证实了这一点。无论你遇到什么问题,都可能与你到目前为止所描述的不同。

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
</HEAD>
<BODY>
<form accept-charset="utf-8" method="get" action="http://www.example.com/something">
<input type="text" name="q">
<input type="submit">
</form>
</BODY>
</HTML>

除非您对页面本身使用备用编码,否则实际上不需要accept-charset。但我是为了说明目的而留下它。因为它实际上是有用的,至少在IE的早期版本中(事情可能已经改变;我的同事在IE5中指定了行为),你需要一个没有值的隐藏“_charset_”字段鼓励浏览器标记它实际使用的字符集,但这在utf-8页面中是多余的。)

答案 1 :(得分:0)

它可以是字体安装或URL编码问题

我在处理CJK字符时遇到的一个主要问题是安装操作系统时默认情况下未安装东亚语言字体。即使没有安装,这些字符也会在MS Word中正确显示。 为了确保操作系统中的所有应用程序都能处理CJK(中文,日文和韩文),下面的练习更好

  1. 转到控制面板
  2. 选择区域和语言选项
  3. 转到语言标签
  4. 选中复选框以安装东亚语言字体
  5. 希望你有Windows CD随身携带。

    之后,IE8希望能够正确显示角色。

    如果您正在进行任何网址编码,请确保在处理非ASCII字符时始终使用UTF-8作为字符编码。

答案 2 :(得分:0)

首先,IE认为中文字符可以在UTF-8中“按原样”发送,而Firefox认为它们需要进行URL编码。

您是否在电线上观看了GET请求?我敢打赌,它实际上是一个三字节序列,你用来显示它的工具是将它减少到?。