遇到过此类问题,主要的原因是,MySQL 的UTF8是3个字节的UTF8,遇到4个字节的UTF8就报错了。
因此,解决方法
升级Drupal的MySQL的格式为utf8mb4,用phpmyadmin打开表格,修改编码为UTF-8 Unicode (utf8mb4)。主要涉及的表包括field_data_body、field_revision_body。
参考:
http://www.midwesternmac.com/blogs/jeff-geerling/solving-emoji-problem-drupal-7
https://www.drupal.org/node/1824506
用Blob存储,不用varchar/text。(自己没测试过)
参考: http://jessej.blog.163.com/blog/static/6501024820139130509860/
替换掉特殊字符,具体用下面的函数
function replace4byte($string) {
return preg_replace('%(?:
\xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)%xs', '', $string); }