现象
原因
组合变音字符大量叠加让其越界显示,周围的字符就会被遮盖
解决方案
将组合变音字符(U+0300-U+036F,U+0489,U+0E47)替换成□
$content = preg_replace('/([x{0300}-x{036F}]|x{0489}|x{0E47})/u', '□', $content);
ps:另外两个字符集(U+FE20-U+FE2F,U+20D0-U+20FF)没有验证是否会覆盖,蛮写一下
$content = preg_replace('/([x{0300}-x{036F}]|[x{FE20}-x{FE2F}]|[x{20D0}-x{20FF}]|x{0489}|x{0E47})/u', '□', $content);
参考资料
https://www.zhihu.com/question/394434460/answer/1222502907
https://blog.csdn.net/Wangdanting123/article/details/98079484