最近做开发 发现,有些字符不能存进mysql,后来百度后,得出的结论是,mysql的utf8编码并不是真正完整的utf8,在mysql新版本里选择utf8mb4这才是完整的utf8编码。
手机上有些图标比如: Emoji表情图标 在mysql里面需要选择utf8mb4才能存储和显示,网上大部分用mysql存Emoji表情相关的解决办法是 把mysql的字符集改为 utf8mb4,但是 最近有个需求就是截取掉对于mysql的utf8mb4的字符集。想了几天,突然想在wordpress看代码,结果 果然找到,分享之。此方案为过滤掉 utf8mb4 的字符
我这里的mysql本来就不支持utf8mb4的,所以就这样基本上看不到效果….
方法一:
$str = '□测试,测试!123□';
$charset = 'utf8';
$regex = '/
(
(?: [x00-x7F] # single-byte sequences 0xxxxxxx
| [xC2-xDF][x80-xBF] # double-byte sequences 110xxxxx 10xxxxxx
| xE0[xA0-xBF][x80-xBF] # triple-byte sequences 1110xxxx 10xxxxxx * 2
| [xE1-xEC][x80-xBF]{2}
| xED[x80-x9F][x80-xBF]
| [xEE-xEF][x80-xBF]{2}';
if ( 'utf8mb4' === $charset ) {
$regex .= '
| xF0[x90-xBF][x80-xBF]{2} # four-byte sequences 11110xxx 10xxxxxx * 3
| [xF1-xF3][x80-xBF]{3}
| xF4[x80-x8F][x80-xBF]{2}
';
}
$regex .= '){1,40} # ...one or more times
)
| . # anything else
/x';
$str1 = preg_replace( $regex, '$1', $str );
var_dump($str1);
方法二:
$str1 = preg_replace('/[x{10000}-x{10FFFF}]/u', '', $str);
var_dump($str1);