零点博客实战:C#对接EMLOG接口,用正则表达式清洗爬虫数据并筑牢SQL注入防线

昨天在更新零点博客的EMLOG文章时,发现由于手动导入了一些第三方爬虫数据,文章标签乱七八糟,全是乱码和多余符号,手动删得我想吐。于是,我决定写个C#的小脚本,配合正则表达式批量清洗,顺便讲讲怎么把数据安全地塞进MySQL数据库。这绝对是一篇能直接复用的干货。

一、 爬虫数据太脏?正则表达式是救星

爬虫抓回来的数据通常是JSON格式,但在入库前,往往需要做一步数据清洗。比如我需要提取文章标题里的ID,或者把HTML标签从标签页里剔除。

这里我不讲那些虚的,直接上零点博客实战中使用的Regex(正则表达式)写法。假设我们抓取到的字符串里包含类似 <a href='12345'>文章</a> 的内容,我们需要提取数字:

string dirtyContent = "<a href='12345'>精彩文章</a>";

// 使用匹配组提取特定内容,避免手动截取字符串导致报错
System.Text.RegularExpressions.Match match = 
    System.Text.RegularExpressions.Regex.Match(dirtyContent, "href='(\d+)'", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

if (match.Success)
{
    int id = int.Parse(match.Groups[1].Value);
    Console.WriteLine($"提取到的ID是:{id}");
}

博主避坑指南: 正则最难的不是写,而是转义。如果你在替换HTML实体(比如把 &nbsp; 变成空格)时出问题,检查一下你的转义符 @ 或 \ 是否打错了。在处理大量文本时,记得用 RegexOptions.Compiled 提高性能。

二、 数据清洗完了,怎么安全入库?SQL注入是老大难

清洗完数据,下一步就是操作MySQL。很多初学者喜欢把拼接好的字符串直接扔给SQL执行,这在SQL注入防护上绝对是自杀式行为。

在C#后端开发中,必须使用预处理语句(Prepared Statements)。不要问为什么,看代码:

string sql = "INSERT INTO `emlog_post` (`title`) VALUES (@title)";

// 使用using语句自动释放数据库连接,防止内存泄漏
using (MySqlConnection conn = new MySqlConnection("连接字符串"))
{
    conn.Open();
    using (MySqlCommand cmd = new MySqlCommand(sql, conn))
    {
        // 重点是这里!将参数与SQL分离
        cmd.Parameters.AddWithValue("@title", cleanedTitleFromRegex);

        int rows = cmd.ExecuteNonQuery();
        Console.WriteLine($"成功插入 {rows} 条数据");
    }
}

这样做的好处是,无论用户输入什么特殊字符(哪怕是含 ; DROP TABLE users-- 的恶意代码),正则只把它当普通文本处理,而数据库只会把它当参数,彻底切断SQL注入的路径。

三、 实战复盘与总结

今天的这个脚本虽然简单,但涵盖了HTML/CSS/JS解析的基础思维(取值)以及后端安全的核心逻辑。如果你在做在线工具开发,比如文章格式转换器,核心其实就是这一套流程:

  1. 输入: 获取用户输入的文本或JSON。
  2. 处理: 利用正则表达式进行校验、替换、提取。
  3. 输出/存储: 通过接口开发与数据库交互,确保SQL注入防护到位。

如果你在搭建EMLOG主题或插件时遇到标签乱码问题,不妨照着这篇文章的逻辑重写一遍清洗逻辑。代码虽然冗长,但远比后期花时间去修bug要划算。

好了,今天的零点博客复盘就到这里,希望能帮到正在开发路上的你。