如何让drupal站点支持emoji字符

在往drupal的站点插入数据时,我们经常会遇到一个问题,当插入的数据包含emoji等特殊字符时,往往插入不成功,伴随着还有报错信息。这是我们的程序出问题了吗?不一定是,可能的原因有mysql版本过低,mysql配置信息不正确等。如何让drupal站点支持emoji字符呢?drupal7.50让我们看到了可能。

drupal7.50是一个跨度比较大的版本,直接从drupal7.44跳跃过来的。其中着重向我们介绍的一个新特性就是增加了对 full UTF-8 (emojis, Asian symbols, mathematical symbols)的支持,当我们的站点和数据库配置正确就可以启用了。 

屏幕快照 2016-09-22 下午5.08.42.png

在状态报告中就可以看到你的站点是否支持多字节的UTF-8。如上图所示就是drupal升级到7.50后出现的提示信息。drupal官网也给了一篇文章介绍如何启用这个功能:Multi-byte UTF-8 support in Drupal 7

这篇文章已经介绍的非常详细了,我再来简单总结一下。

1.先检查MySQL 与   PHP MySQL驱动的版本。

MySQL服务必须支持utf8mb4 字符集(最低版本5.5.3)

低于5.7.7的MySQL在配置文件my.cnf 添加设置:

[mysqld]

innodb_large_prefix=true

innodb_file_format=barracuda

innodb_file_per_table=true

PHP MySQL驱动必须支持utf8mb4 字符集(libmysql 5.5.3以上/ mysqlnd 5.0.9 以上) 。

 

2.针对已经安装好的drupal站点。

备份好数据库。然后将数据表全部转换成utf8mb4的。

通过MySQL的命令行就可以实现转换。

更改已存在的数据库的字符编码类型  ALTER DATABASE {database_name} DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

更改已存在的数据表的字符编码类型  ALTER TABLE {table_name} CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

修改后需重启MySQL。

drupal也提供了utf8mb4_convert模块实现这个转换。建议大家用这个方法。不过这个模块比较特殊,不是一般模块的安装方式。安装和使用时都需要用到drush

安装:drush @none dl utf8mb4_convert-7.x

转换:drush utf8mb4-convert-databases

转换时请将站点设为维护模式。

修改setting.php文件,设置"charset" 和 "collation" 的值:

$databases['default']['default'] = array(

  'driver' => 'mysql',

  'database' => 'databasename',

  'username' => 'username',

  'password' => 'password',

  'host' => 'localhost',

  'charset' => 'utf8mb4',

  'collation' => 'utf8mb4_general_ci',

);

 

3.针对新的drupal站点。

在安装前修改setting.php文件,内容同上。启动安装就可以了。

一切设置就须,可以到状态报告里查看一下该功能是否启用成功。 

屏幕快照 2016-09-22 下午5.10.27.png

 如上图所示,启用成功。站点中可以插入如?等特殊字符了。