我有一个使用jQuery 表单插件提交数据的表单。从那里它经过一些服务器端处理并最终存储在 MySQL 数据库中。
提交这些字符后áâãäï
,它们将作为áâãäï'
(在访问数据库之前)发送到服务器。日语字符等也会发生相同类型的事情。
我已经尝试了 UTF-8 和 ISO-8859-1 的表单编码、页面编码、php 服务器端编码和 db 编码。仍然没有运气。
我有一个使用jQuery 表单插件提交数据的表单。从那里它经过一些服务器端处理并最终存储在 MySQL 数据库中。
提交这些字符后áâãäï
,它们将作为áâãäï'
(在访问数据库之前)发送到服务器。日语字符等也会发生相同类型的事情。
我已经尝试了 UTF-8 和 ISO-8859-1 的表单编码、页面编码、php 服务器端编码和 db 编码。仍然没有运气。
在内部,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 文本。
这些字符可能是从 WORD (ISO-8859-1) 粘贴的。Ajax 只需要 UTF-8,因此在将它们发送到服务器之前,您必须在客户端上对其进行转换。