如何从ajax表单到MySQL获取非英语字符

时间:2011-01-26 20:52:25

标签: php javascript utf-8 character-encoding iso-8859-1

我有一个使用jQuery form plugin提交数据的表单。从那里它经过一些服务器端处理,最后存储在MySQL数据库中。

提交这些字符áâãäï后,它们将以áâãäï'的形式发送到服务器(在点击数据库之前)。日语字符等也会发生同样的事情。

我已经尝试过UTF-8和ISO-8859-1用于表单编码,页面编码,php服务器端编码和db编码。仍然没有运气。

2 个答案:

答案 0 :(得分:2)

在内部,JavaScript使用UTF-16字符串,而encodeURIComponent()等函数将字符编码为UTF-8,因此问题可能不是JavaScript代码。问题可能在您的PHP代码中。

  • 服务器发送的每个页面(包括表单所在的页面)都必须包含标题Content-type: text/html;charset=UTF-8。您可以使用Firebug的Net面板进行检查。

  • 在进行任何查询之前,始终set the character encoding您的MySQL连接。否则,MySQL会将UTF-8字符串的每个字节解释为Latin-1字符,这很容易导致您描述的内容。使用如下代码:

    mysql_query("SET NAMES 'utf8'");    // works in old versions of PHP (< 5.2)
    mysql_set_charset('utf8',$conn);    // works in PHP 5.2+
    
  • 请记住,某些(并非所有)PHP字符串函数将mangle Unicode text

答案 1 :(得分:1)

字符可能是从WORD(ISO-8859-1)粘贴的。 Ajax只需要UTF-8,因此在将它们发送到服务器之前,您必须在客户端上进行转换。

请参阅:Change encoding from UTF-8 to ISO-8859-2 in Javascript