我正在使用PHP和MySQL创建一个Web基础应用程序。我希望它能够同时保存任何类型的用户输入字符,包括阿拉伯语或日语等英语和非英语字符。
我该怎么做才能实现这一目标?
答案 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 否则,请使用类似的东西。