如何从ajax形式获取非英文字符到MySQL

发布于 2024-10-14 14:32:05 字数 295 浏览 6 评论 0原文

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

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

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

I have a form that submits data using the jQuery form plugin. From there it goes through some server side handling and finally stored in a MySQL db.

Upon submitting these characters áâãäï they become sent to the server as áâãäï' (before hitting the database). The same type of thing happens with Japanese characters, etc.

I have tried both UTF-8 and ISO-8859-1 for the form encoding, page encoding, php server side encoding and db encoding. Still no luck.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

戈亓 2024-10-21 14:32:05

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

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

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

    mysql_query("设置名称'utf8'"); // 适用于旧版本的 PHP (< 5.2)
    mysql_set_charset('utf8',$conn); // 适用于 PHP 5.2+
    
  • 请记住,一些(不是全部)PHP 字符串函数将破坏 Unicode 文本

Internally, JavaScript works with UTF-16 strings, and functions such as encodeURIComponent() encode characters to UTF-8, so it is probably not the JavaScript code that is the problem. The problem is likely within your PHP code.

  • Every page sent by the server (including the page the form is on) has to have the header Content-type: text/html;charset=UTF-8. You can check this using Firebug's Net panel.

  • Always set the character encoding of your MySQL connection before making any queries. Otherwise, MySQL will interpret each byte of the UTF-8 string as a Latin-1 character, which can easily cause what you describe. Use code such as:

    mysql_query("SET NAMES 'utf8'");    // works in old versions of PHP (< 5.2)
    mysql_set_charset('utf8',$conn);    // works in PHP 5.2+
    
  • Keep in mind that some (not all) PHP string functions will mangle Unicode text.

你与昨日 2024-10-21 14:32:05

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

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

The characters are probably being pasted in from WORD (ISO-8859-1). Ajax expects UTF-8 ONLY, so you'll have to convert them on the client before sending them to the server.

See: Change encoding from UTF-8 to ISO-8859-2 in Javascript

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文