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ⓣ