特殊字符

This commit is contained in:
ASUS 2025-10-20 19:08:45 +08:00
parent 767c20cb8b
commit f537a2c4a4
1 changed files with 36 additions and 1 deletions

View File

@ -148,7 +148,7 @@ if (!function_exists('saveJson_arr')) {
foreach ($cont_json_arr as $k1 => $v1) {
if($k == $v1) {
if($k1 == 'username') {
$new_arr[$k1] = $user['nick_name'];
$new_arr[$k1] = removeEmojiAndSpecialChars($user['nick_name'], false);
}else {
$new_arr[$k1] = $v;
}
@ -201,3 +201,38 @@ if (!function_exists('replace_json_keys')) {
}
}
/**
* 移除字符串中的表情和特殊字符
* @param string $str 原始字符串
* @param bool $keepBasicPunct 是否保留基本标点(默认保留)
* @return string 处理后的字符串
*/
if (!function_exists('removeEmojiAndSpecialChars')) {
function removeEmojiAndSpecialChars($str, $keepBasicPunct = true)
{
// 1. 移除 Emoji 表情(匹配常见 Emoji 的 Unicode 范围)
$emojiPattern = '/[\x{1F600}-\x{1F64F}]|[\x{1F300}-\x{1F5FF}]|[\x{1F680}-\x{1F6FF}]|[\x{1F1E0}-\x{1F1FF}]|[\x{2600}-\x{26FF}]/u';
$str = preg_replace($emojiPattern, '', $str);
// 2. 移除特殊字符(控制字符、非预期字符)
if ($keepBasicPunct) {
// 保留:字母、数字、中文、空格,以及基本标点(!@#$%^&*()_+-= etc.
// 正则含义:匹配所有不在以下范围内的字符并移除
// \p{L}:所有语言的字母(包括中文、英文、日文等)
// \p{N}:所有数字
// \s空白字符空格、换行等
// !-~ASCII 可见标点33-126 范围内的字符)
$specialPattern = '/[^\p{L}\p{N}\s!-~]/u';
} else {
// 不保留标点:只保留字母、数字、中文、空格
$specialPattern = '/[^\p{L}\p{N}\s]/u';
}
$str = preg_replace($specialPattern, '', $str);
// 3. 移除连续的空白字符(可选,根据需求)
$str = preg_replace('/\s+/', ' ', $str);
return trim($str);
}
}