在Web开发中,处理用户输入或外部数据时,常会遇到如“�”(Unicode替换字符)和连续退格符(\b)等特殊字符。这些字符可能导致数据存储错误、显示乱码或安全漏洞。本文将分别从JavaScript(前端)和PHP(后端)角度,提供一套高效、安全的清除方案。
“�”字符:通常出现在编码不一致时(如UTF-8解码失败),代表无法识别的字符。
退格符(\b):ASCII控制字符,可能在粘贴文本或数据流中意外出现,影响字符串逻辑。
清除这些字符需结合编码处理与正则表达式过滤。
JS适合在前端进行初步过滤,减轻服务器压力。
function removeReplacementChar(str) {
// 使用正则替换Unicode替换字符(U+FFFD)
return str.replace(/\uFFFD/g, '');
}
// 示例
let text = 'Hello�World';
console.log(removeReplacementChar(text)); // 输出:HelloWorld
function removeControlChars(str) {
// 匹配退格符(\b)、换行符等控制字符(ASCII 0-31和127)
return str.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, '');
}
// 示例
let input = 'Test\b\b\bBackspace';
console.log(removeControlChars(input)); // 输出:TestBackspace
function sanitizeString(str) {
return str
.replace(/\uFFFD/g, '') // 移除替换字符
.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, '') // 移除控制字符
.trim(); // 去除首尾空格
}
PHP在后端处理数据更安全,可结合多字节字符串函数。
function removeReplacementCharPHP($str) {
// 使用mb_convert_encoding处理编码问题
$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');
// 替换Unicode替换字符
return str_replace("\xEF\xBF\xBD", '', $str); // “�”的UTF-8字节序列
}
// 示例
$text = 'Data�Corruption';
echo removeReplacementCharPHP($text); // 输出:DataCorruption
function removeControlCharsPHP($str) {
// 正则匹配控制字符(包括退格符)
return preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/', '', $str);
}
function sanitizeInput($input) {
if (is_array($input)) {
return array_map('sanitizeInput', $input);
}
$cleaned = trim($input);
$cleaned = removeControlCharsPHP($cleaned);
$cleaned = removeReplacementCharPHP($cleaned);
// 可选:移除多余空格(连续退格可能导致空格堆积)
$cleaned = preg_replace('/\s+/', ' ', $cleaned);
return htmlspecialchars($cleaned, ENT_QUOTES, 'UTF-8'); // 防XSS
}
通过以上方案,可有效清除特殊字符,保障数据纯净性与系统安全。适用于表单提交、API接口、数据库存储等场景,提升Web应用的健壮性。