0

尝试做我认为相对简单的事情时,我遇到了无穷无尽的问题:

我需要有一个表单,它可以接受用户输入的混合英语和其他语言、一些多字节(即日语、韩语等)的文本,并由 php 处理并存储(安全,避免 SQL 注入)在 mysql 数据库中。它还需要从数据库中访问、处理和在屏幕上使用。

我为拉丁字符设置了它,但是当我添加拉丁字符和多字节字符的混合时,它会变成乱码。

我试图做我的功课,但现在只是把头撞在墙上。

魔术引号已关闭,我尝试对表中的字段使用 utf8_encode/decode、htmlentities、addslashes/stripslashes 和(在 mysql 中)“utf8_general_ci”和“utf8_unicode_ci”。

部分问题在于,有太多地方我可能会搞砸,以至于我不确定从哪里开始解决问题。

非常感谢您对此提供的任何帮助。理想情况下,如果有人有工作的 php 代码示例和/或知道正确的 mysql 表格式,那就太好了。

4

6 回答 6

2

以下是 UTF8 模式下要检查的清单:

  • MySQL 表编码。你似乎已经这样做了。
  • MySQL 连接编码。做SHOW STATUS LIKE 'char%',你会看到 MySQL 正在使用什么。您需要character_set_client,character_set_connectioncharacter_set_results设置为utf8可以通过SET NAMES 'utf8'在所有连接开始时在您的应用程序中轻松设置。这是大多数人忘记检查的 IME。
  • 如果你使用它们,你的 CLI 和终端设置。在 bash 中,这意味着LANG=(something).UTF-8.
  • 您的源代码(这通常不是问题,除非您有 UTF8 常量文本)。
  • 页面编码。您似乎也有这个权利,但是您的浏览器调试工具可以提供很多帮助。

一旦你把这一切都做好了,你的应用程序中只需要mysql_real_escape_string().

哦, (遗憾的)可以将正确编码的 UTf8 文本成功存储在编码类型错误的列中或来自编码类型错误的连接中。它也可以“正确”返回。直到你修复了所有不是 UTF8 的位,此时它会中断。

于 2011-03-22T04:48:47.880 回答
0

我认为您没有任何实用的替代 UTF-8 的方法。您将不得不追踪编码和/或解码中断的位置。首先检查您是否可以从 mysql 命令行或通过 phpmyadmin 将多语言文本往返传输到数据库。追踪并消除该级别的问题。然后通过模拟对您的 php 的输入并检查输出再移出一个级别,再次处理任何问题。最后将浏览器添加到组合中。

于 2011-03-22T03:51:42.950 回答
0

首先,您需要检查是否可以直接将多语言文本添加到数据库中。如果可能的话,你可以在你的应用程序中做到这一点

于 2011-03-22T04:07:45.130 回答
0

您是否偶然序列化任何数据?PHP 的序列化函数在序列化非英文字符时存在一些问题。

你所做的一切都应该是utf-8 编码的

您可以尝试的一件事是在将数据放入数据库时​​将其json_encode()并在检索时将其json_decoding()

于 2011-03-22T04:21:10.537 回答
0

检查您的数据库连接设置。它还需要支持 UTF-8。

于 2011-03-22T05:04:29.140 回答
0

问题是由于我没有在 php.ini 文件中设置默认字符,并且(可能)没有在 mysql 表中设置字符集(在 PhpMyAdmin 中,通过操作选项卡)。

将默认字符集设置为“utf-8”修复了它。谢谢您的帮助!!

于 2011-03-22T19:48:16.360 回答