如何在MySQL数据库中保存所有类型的用户输入字符?

时间:2010-08-08 16:01:06

标签: php mysql character-encoding collation

我正在使用PHP和MySQL创建一个Web基础应用程序。我希望它能够同时保存任何类型的用户输入字符,包括阿拉伯语或日语等英语和非英语字符。

我该怎么做才能实现这一目标?

3 个答案:

答案 0 :(得分:2)

您需要使用Unicode。阅读MySQL manual section on Unicode和Joel Spolsky的The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

您可能希望将相关表格/列的字符集(编码)设置为utf8。您还需要将HTML / PHP文件的编码设置为UTF-8。您可以使用< head>

中的元标记执行此操作
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

您还可以设置Apache / PHP发送的Content-Type:标头。

即使设置完成后,您仍可能会遇到特定于浏览器的问题。例如,Internet Explorer可能并不总是使用UTF-8,因此Rails 3 had to put in a workaround

答案 1 :(得分:2)

对于MySQL,首先需要使用UTF8字符集定义数据:

CREATE DATABASE xx [...] DEFAULT CHARACTER SET 'utf8' DEFAULT COLLATE utf8_general_ci

从PHP创建数据库连接时,只需在打开它后运行快速命令:

SET NAMES 'utf8'

或者,如果您可以访问MySQL的my.ini,您可以将其添加到配置中并忘记上述内容:

skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8

(请注意,这不是php.ini,而是MySQL的ini)


对于PHP,如果您需要操作多字节字符串:确保您的mbstring库处于活动状态,然后更改字符串&amp; regexp函数调用使用mb_ *等效。

另外,请确保您的编辑器以UTF8保存,以便一切都一致。 Eclipse / PDT使其变得简单,至少(项目 - &gt;属性 - &gt;文本文件编码)。


最后,处理文化差异:这是困难的部分。有时它就像在CSS中设置p { direction: rtl; }一样简单,有时候你会试图破解用户刚刚发布的字母表。这取决于你使用不同语言做什么。

答案 2 :(得分:1)

对于初学者,请确保您已阅读SQL注入。您需要采取强有力的预防措施,以便安全地对输入进行编码。通常,您将过滤/丢弃不安全的内容。因此,如果你真的需要允许它,那么你需要注意不要让自己变得容易。

基本上,您需要相同类型的保护,同时允许“危险”内容(如源代码示例),像这样的网站使用。也是常见的系统,如PHPBB2,WordPress,Wiki等。

如果数据需要可搜索,我认为您的任务更难。

如果您使用的是PHP,则mysql_real_escape_string()函数看起来很好: http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php 否则,请使用类似的东西。