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

TIM*_*MEX 0 javascript unicode encoding localization cjk

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

q=%E6%BC%A2&start=0
Run Code Online (Sandbox Code Playgroud)

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

q=?&start=0
Run Code Online (Sandbox Code Playgroud)

它把它变成了一个问号.

Jas*_*rue 5

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

把它放在你的<HEAD>:

<META http-equiv="Content-Type" content="text/html; charset=utf-8">
Run Code Online (Sandbox Code Playgroud)

如果您的内容不是真正的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>
Run Code Online (Sandbox Code Playgroud)

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