/// 安全过滤:防止 CSV 注入(公式注入)
/// 常见恶意前缀:= @
pub fn check_csv_injection(field: &str, row_count: usize) -> bool {
    if let Some(first_char) = field.chars().next() {
        if "=@".contains(first_char) {
            let e_field = escape_special_chars(field);
            eprintln!("Line {}, Potential CSV formula injection detected, filtered: {}", row_count, &e_field);
            return true;
        }
    }
    false
}

/// 处理字符串中的特殊符号,例如将 \n 替换为 \\n, \t 替换为 \\t 等
///
/// # 参数
/// * `input` - 需要处理的原始字符串
///
/// # 返回值
/// * 处理后的字符串
pub fn escape_special_chars(input: &str) -> String {
    let mut result = input.to_string();

    // 特殊字符及其对应的转义序列
    let special_chars = [
        ("\n", "\\n"),
        ("\t", "\\t"),
        ("\r", "\\r"),
        ("\"", "\\\""),
        ("'", "\\'"),
        ("\x08", "\\b"),  // \b
        ("\x0c", "\\f"),  // \f
        ("\x0b", "\\v"),  // \v
        ("\\", "\\\\"),
    ];

    // 使用 for 循环遍历并替换所有特殊字符
    for (char, escaped_char) in special_chars.iter() {
        result = result.replace(*char, *escaped_char);
    }

    result
}