帮助多语言文本,PHP和MySQL

时间:2011-03-22 03:35:36

标签: php mysql character-encoding multibyte

尝试做我认为相对简单的事情时,我已经完成了任何问题:

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

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

我已经尝试过做作业,但现在正把我的头撞在墙上。

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

问题的一部分是,有很多地方我可能会弄乱它,我不知道从哪里开始解决问题。

非常感谢您提供的任何帮助。理想情况下,如果有人有PHP代码示例和/或知道正确的mysql表格式,那将是太棒了。

6 个答案:

答案 0 :(得分:2)

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

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

完成所有这些操作后,您在应用中需要的只是mysql_real_escape_string()

哦, (遗憾地)可以在具有错误编码类型的列中成功存储正确编码的UTf8文本,或者从错误编码类型的连接中成功存储。它也可以“正确”回归。在你修复所有不是UTF8的位之前,它会断开。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

首先,您需要检查是否可以直接向数据库添加多语言文本。如果可能,您可以在您的应用程序中执行此操作

答案 3 :(得分:0)

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

您所做的一切都应该是utf-8 encoded

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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