2011-01-20 30 views
-1

我有一个网站接受来自不同语言环境的论坛的用户提交,英语和瑞典语是当前“支持”的语言环境。论坛上最常用的语言是瑞典语,这是我遇到字符编码间歇性问题的地方。网络应用表单提交中的字符编码问题

会不会是一些浏览器给我ISO 8859个编码字符串,但该页面采用UTF-8编码(也应该在编码提交?)。我的PHP serverside正在猜测编码与像mb_detect_encoding这样的东西,但似乎没有帮助。

我有这样的代码来 “猜测” 的编码

if (mb_detect_encoding($str, 'UTF-8, ISO-8859-1') == 'ISO-8859-1') { 
    return mb_convert_encoding($str, 'UTF-8', 'ISO-8859-1'); 
} 
return $str; 

所提交的材料。其他编码选项对于这个特定问题不是问题。 任何帮助,将不胜感激。

+0

确保表单页面明确地设置了UTF-8(通过发送一个Content-Type头), 2011-01-20 21:49:10

+0

@German yes页面明确指出UTF-8 http,html属性和元。 – 2011-01-20 22:03:36

回答

1

无论您的HTML页面的字符编码如何,浏览器都可以以任何字符编码发送数据。它应该在Content-Type头中通告使用的编码。您可以使用form上的accept-charset Atrribute指定要接收的字符编码。

+0

我没有在apache配置中做到这一点,有没有一个php.ini指令? – 2011-01-20 22:01:56

3

会不会是一些浏览器给我ISO 8859个编码字符串,但如果你是服务包含表单的页面与Content-Type: text/html;charset=utf-8标题的页面是UTF-8

编码,应该没有发生,具有一定的注意事项:

  • 如果用户来保存包含表单的页面,并从保存的版本提交后,报头信息会丢失,所以你会得到浏览器的猜测编码,这可能是错误的。在这种情况下,您还可以在页面上添加标头的<meta>版本,以便在保存到光盘时保留信息。

  • 如果用户特意从视图菜单中更改编码,这通常会导致形式在用户的(错)重写编码提交。如果你已经为页面提供服务,这很少见,但<form accept-encoding="utf-8">属性可以缓解这个问题,除非它在IE中无法正常工作。所以这不是万能的。

  • 如果用户使用了自定义的非浏览器应用程序提交他们的表单数据,全盘皆输。

我认为你试图通过首先尝试UTF-8检测编码是关于如果你真的无法控制提交编码,你可以做的最好的尝试。 mb_detect_encoding有点弱,因为它允许一些字节序列不是非常有效的UTF-8('overlongs'),但这个想法是合理的。