即使将MySQL DB,表和字段的排序规则设置为utf8_general_ci,也经常发生将 é 等字符转换为 é的情况 。页面的 Content-Type中 的编码也设置为UTF8。
我知道utf8_encode / decode,但是我不确定在哪里以及如何使用它。
我已经阅读了“ 绝对是每个软件开发人员的绝对最低限度,肯定必须了解Unicode和字符集(无借口!) ”一文,但是我需要一些特定于MySQL / PHP的指针。
问题:如何确保用户输入的包含国际字符的数据不会损坏?
首先看一下http://www.nicknettleton.com/zine/php/php- utf-8-cheatsheet,我认为缺少了一件重要的事情(也许我忽略了这一点)。根据您的MySQL安装和/或配置,您必须设置连接编码,以便MySQL知道您期望在客户端上使用哪种编码(意味着MySQL连接的客户端,应该是您的PHP脚本)。您可以通过手动发出
SET NAMES utf8
查询发送到发送到MySQL服务器的任何其他查询之前。
如果您在PHP端使用PDO,则可以设置连接以使用以下命令在每个(重新)连接上自动发出此查询:
$db=new PDO($dsn, $user, $pass); $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");
初始化数据库连接时。