如何用PHP去除JSON字符串中的特殊Unicode字符(如️等)
移除字符串中的特殊Unicode字符(如变体选择符、乱码字符)的PHP实现方法
你遇到的ufe0f是Unicode变体选择符-16(U+FE0F),而�是替换字符(U+FFFD,通常代表无效或无法渲染的Unicode字符)。以下几种PHP方法可以快速清理这类字符,得到纯目标字符串:
方法1:精准移除指定特殊Unicode字符
直接匹配变体选择符范围和替换字符,用正则替换为空:
$originalStr = "O_ufe0fPufe0f_ufe0fAufe0f"; // 移除U+FE00到U+FE0F的变体选择符,以及U+FFFD替换字符 $cleanedStr = preg_replace('/[\x{FE00}-\x{FE0F}\x{FFFD}]/u', '', $originalStr); echo $cleanedStr; // 输出:O_P_A
u修饰符是关键,确保正则引擎以Unicode模式解析字符串,避免乱码。
方法2:只保留可打印ASCII字符
如果只需要保留字母、数字、下划线这类常规ASCII字符,用更严格的正则过滤:
// 保留所有可打印ASCII字符(空格~波浪号) $cleanedStr = preg_replace('/[^\x20-\x7E]/u', '', $originalStr); // 或者更精准:仅保留大小写字母、数字、下划线 $cleanedStr = preg_replace('/[^a-zA-Z0-9_]/u', '', $originalStr);
这种方式会彻底移除所有非ASCII的特殊字符,适合需要严格纯ASCII输出的场景。
方法3:使用mb扩展函数处理
如果你的环境启用了mbstring扩展,也可以用mb_ereg_replace实现同样效果:
$cleanedStr = mb_ereg_replace('[\x{FE00}-\x{FE0F}\x{FFFD}]', '', $originalStr);
如果还有其他需要移除的特殊Unicode字符,只需扩展正则表达式中的字符范围即可。
内容的提问来源于stack exchange,提问作者Ikrom Jalolov
相关产品推荐
相关产品推荐

