一尘不染

具有国际字符串的PHP和MySQL最佳实践

mysql

即使将MySQL DB,表和字段的排序规则设置为utf8_general_ci,也经常发生将 é 等字符转换为 é的情况 。页面的
Content-Type中 的编码也设置为UTF8。

我知道utf8_encode / decode,但是我不确定在哪里以及如何使用它。

我已经阅读了“
绝对是每个软件开发人员的绝对最低限度,肯定必须了解Unicode和字符集(无借口!)
”一文,但是我需要一些特定于MySQL / PHP的指针。

问题:如何确保用户输入的包含国际字符的数据不会损坏?


阅读 221

收藏
2020-05-17

共1个答案

一尘不染

首先看一下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");

初始化数据库连接时。

2020-05-17