前言:零点博客的底层重构复盘
最近在维护零点博客的文档中心时,遇到了一个比较棘手的需求:需要将底层的 EMLOG 内容迁移到一个更灵活的 C# 后端系统中,同时还要保持原有的 HTML 结构兼容性。这次实战让我对技术笔记有了更深的理解——不仅是记录代码,更是记录逻辑和避坑指南。今天把这次技术笔记的完整复盘整理出来,希望能帮到正在做PHP转C#开发或者涉及爬虫开发的朋友。
一、 EMLOG 模板解析与正则表达式的应用
EMLOG 的模板是 PHP 混编 HTML 的,直接读取文件进行二次开发不太容易。我写了一个简单的正则表达式解析器,提取出其中的标题、正文和标签。
string pattern = @"<h1>(.+?)</h1>.+?<div class="content">(.+?)</div>";
Regex rg = new Regex(pattern, RegexOptions.Singleline);
Match match = rg.Match(fileContent);
这里有个坑:正则表达式如果不加 `RegexOptions.Singleline`,默认是单行模式,遇到换行符就停了。对于正文这种长文本,必须开启单行模式才能跨行匹配。
二、 C# 后端开发:连接 MySQL 与 SQL 注入防护
拿到数据后,难点在于如何安全地存入我们的MySQL数据库。很多初学者喜欢拼接字符串,比如 `string sql = "INSERT INTO logs VALUES ('" + title + "')";`,这在生产环境是高危操作。
作为这次技术笔记的核心,我强烈建议大家使用预处理语句。这是解决SQL注入防护最根本的方法。
string sql = "INSERT INTO logs (title, content) VALUES (@title, @content);";
MySqlCommand cmd = new MySqlCommand(sql, conn);
// 明确指定参数,数据库会自动转义单引号和特殊字符
cmd.Parameters.AddWithValue("@title", title);
cmd.Parameters.AddWithValue("@content", content);
cmd.ExecuteNonQuery();
不要怀疑,哪怕是传入的标题里包含 `' OR '1'='1`,预处理语句也会把它当成普通字符串处理,而不是执行恶意 SQL。
三、 JSON/XML 数据解析与接口开发
为了方便前端调用,我封装了一个简单的 API 接口。在处理JSON/XML数据解析时,我使用了 Newtonsoft.Json 库。
// JSON 反序列化
var data = JsonConvert.DeserializeObject<BlogData>(jsonString);
return Json(data);
在解析爬虫抓取到的 XML 数据时,要注意 namespace 的问题。很多第三方爬虫开发工具(如 HtmlAgilityPack)抓下来的 XML 带命名空间,直接用 XPath 可能匹配不到,需要去掉命名空间或指定前缀。
四、 实战避坑指南
- 字符编码问题:在处理多语言博客内容时,MySQL 的 utf8mb4 很重要,否则 Emoji 表情会乱码。
- 文件读写锁:爬虫并发写入文件时,尽量加锁,否则文件内容会错乱。
- 接口超时:如果是长文本的 API 响应,记得配置 WebApi 的超时时间。
总结
通过这次从 EMLOG 到 C# 后端的迁移,我深刻体会到技术笔记的价值。技术没有绝对的好坏,关键在于理解背后的原理——无论是数据库的安全防护,还是数据的格式解析。如果你也在做在线工具开发,希望这篇关于C#后端开发的复盘能给你一些启发。



评论一下吧
取消回复