Rust文本清理库decancer的使用,高效过滤和修复Unicode混淆字符的Rust插件库

Rust文本清理库decancer的使用,高效过滤和修复Unicode混淆字符的Rust插件库

decancer是一个用于移除字符串中常见Unicode混淆字符/同形异义词的库。

特点

  • 核心使用Rust编写,并采用二分搜索算法确保速度
  • 默认能过滤221,529(19.88%)个不同的Unicode码点,包括:
    • 所有空白字符
    • 所有变音符号,也能消除各种形式的Zalgo文本
    • 大多数leet字符
    • 大多数同形异义词
    • 部分表情符号
  • 与其他包不同,该包支持unicode双向文本,能以与应用程序渲染相同的方式解释从右到左的字符
  • 行为高度可定制

安装

Cargo.toml中添加:

decancer = "3.3.3"

示例

let mut cured = decancer::cure!(r"vEⓡ𝔂 𝔽𝕌Ňℕy ţ乇𝕏𝓣 wWiIiIIttHh l133t5p3/-\|<").unwrap();

assert_eq!(cured, "very funny text with leetspeak");

// 警告:不建议将此输出强制转换为Rust字符串
//       并手动处理,因为decancer有自己的
//       自定义比较措施,包括leet字符匹配!
assert_ne!(cured.as_str(), "very funny text with leetspeak");

assert!(cured.contains("funny"));

cured.censor("funny", '*');
assert_eq!(cured, "very ***** text with leetspeak");

cured.censor_multiple(["very", "text"], '-');
assert_eq!(cured, "---- ***** ---- with leetspeak");

完整示例代码

use decancer;

fn main() {
    // 示例1: 基本使用
    let input = r"𝓗𝓞𝓦 𝓽𝓱𝓲𝓷𝓰𝓼";
    let mut cured = decancer::cure!(input).unwrap();
    println!("Original: {}", input);
    println!("Cleaned: {}", cured);
    
    // 示例2: 包含Zalgo文本的处理
    let zalgo = r"H̵̡̡̡̨̡̢̡̨̡̨̡̢̧̧̧̧̨̡̡̨̡̡̢̢̢̨̢̧̡̡̢̢̡̧̡̧̢̢̢̨̨̢̢̨̢̡̡̨̨̧̢̡̨̧̧̢̧̡̧̨̨̨̢̡̢̧̡̨̢̡̨̢̢̡̡̡̛̙̲̤̪̤̩̩̹̙̙̜̱̞̲̲̝̦̻̼̲̲̹̱̱̪̺̰̤̠̲̼̫̤̬̘̪̲̻̟̬̜̘̠̹̲̝̰̮̖̙̗̹̞̗̞̝̟̭̭̖̤̘̹̼̰̗̩̖̞̜̗̬̼̱̬̗̖̺̻̲̫̙̗̞̖̲̞̱̺̞̪̘̩̙̗̖̝̘̩̠̰̥̙̘̺̗̹̰̲̱̪̮̖̤̫̖̙̜̪̩̭̺̺̖̘̜̫̖̻̙̲̻̜̻̞̰̲̪̲̘̙̩̟̭̗̟̮̦̰̩̱̩̩̟̮̫̬̙̗̞̮̖̹̜̞̼̠̜̬̪̪̮̟̹̦̭̟̰̦̰̞̪̪̖̟̻̝̪̝̫̬̝̹̠̹̝̖̤̥̗̬̳̪̻̠̝̪̼̗̹̳̗̫̦̩̳̗̞̮̩̰̜̘̝̞̳̙̹̙̟̤̼̟̫̲̗̙̖̫̪̫̪̺̹̬̩̱̲̞̪̙̮̝̫̙̠̗̟̠̬̙̞̳̳̪̙̭̙̤̤̻̙̗̜̩̗̭̲̞̟̤̼̤̖̹̘̟̠̱̝̬̞̙̲̥̺̭̺̱̥̘̗̖̬̘̗̭̙̱̟̗̭̭̹̳̟̺̗̫̺̦̗̠̞̜̮̟̗̪̦̻̻͉̭͈̠̙̗̖̰̺̱̦̺̱̜̩̝̩̤̖̭̫̮̬̠̹̖̬̤̗̦̥̺̳̥̥̱̦̞̫̫̝̙̗̱̞̰̹̪̳̖̹̬̖̪̪̳̝̠̳̫̹̺̫̩̦̻̖̤̝̥̟̦̦̠̥̖̮̲̖̙̗̰̮̻͉̰̖̰̭̻̙̱̪̖̗̮̳̳́̾̔̉̆̕̕͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜͜

1 回复

Rust文本清理库decancer的使用指南

介绍

decancer是一个高效的Rust库,专门用于检测和修复Unicode混淆字符(通常用于规避过滤或制造视觉混淆)。它能识别各种Unicode滥用情况,如:

  • 同形异义字符(视觉相似但编码不同的字符)
  • 组合字符(通过多个Unicode码点组合形成的字符)
  • 非常规空格字符
  • 其他可能用于混淆的Unicode变体

这个库特别适合需要处理用户生成内容、实现强大文本过滤或防止欺骗攻击的应用场景。

安装

Cargo.toml中添加依赖:

[dependencies]
decancer = "1.0"

基本使用方法

简单清理文本

use decancer::clean;

fn main() {
    let input = "Hello World";  // 使用全角字符和全角空格
    let cleaned = clean(input).to_string();
    println!("{}", cleaned);  // 输出: "Hello World"
}

检查文本是否包含混淆字符

use decancer::has_weird_unicode;

fn main() {
    let input1 = "Normal text";
    let input2 = "Sⓣ
回到顶部