2

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

提交这些字符后áâãäï,它们将作为áâãäï'(在访问数据库之前)发送到服务器。日语字符等也会发生相同类型的事情。

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

4

2 回答 2

2

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

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

  • 在进行任何查询之前,请始终设置 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 字符串函数会破坏 Unicode 文本

于 2011-01-26T22:05:42.123 回答
1

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

请参阅:在 Javascript 中将编码从 UTF-8 更改为 ISO-8859-2

于 2011-01-26T21:32:49.743 回答