前言:在零点博客的真实开发场景

最近在做零点博客的数据聚合项目,需要从外部 EMLOG 博客系统中同步文章数据到我的 C# 管理后台。涉及到 PHP 后端与 C# 前端的数据交互,这让我想起了之前在开发在线工具时遇到的 JSON 解析与 SQL 防护问题。今天整理这篇技术笔记,不玩虚的,直接上代码和踩坑实录。

一、 数据接口与 JSON 解析实战

EMLOG 本身没有现成的 RESTful API,我们通常是手动写一个 PHP 接口,或者抓取其 XML/JSON 输出。这里演示如何让 C# 去解析对方返回的 JSON 数据。

关键点在于处理乱码和字段映射。在开发爬虫开发工具时,我经常遇到编码问题,这次通过指定 Encoding.UTF-8 解决了大部分问题。

using System.Text;
using System.Text.Json;

// 模拟获取 EMLOG 返回的 JSON 字符串
string jsonResponse = "{\"id\":123,\"title\":\"测试文章\",\"content\":\"<p>正文...</p>\"}";

// 反序列化
var article = JsonSerializer.Deserialize<dynamic>(jsonResponse, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });

// 动态类型操作,实际开发建议使用强类型 ViewModel
string title = article.title;
Console.WriteLine($"获取标题: {title}");

二、 正则表达式清洗 HTML 内容

后端拿到的 `content` 往往是原始的 HTML,直接塞进 MySQL 并不好看。这里必须用上正则表达式来提取纯文本。

注意:正则不能太死板,不同模版生成的 HTML 结构可能不一样。

// 使用正则去除 HTML 标签,只保留文本
string cleanContent = Regex.Replace(article.content.ToString(), "<.*?>", "");
Console.WriteLine(cleanContent);

三、 塞入数据库与 SQL 注入防护

清洗完数据后,下一步是存入 MySQL。这是最危险的一步。接口开发中如果不当处理,很容易出现 SQL 注入。哪怕是从合法接口拿的数据,存入数据库时也必须做防护。

切记:不要用字符串拼接 SQL!

// 使用预处理语句
string sql = "INSERT INTO blog_articles (title, content) VALUES (@title, @content)";
using (MySqlCommand cmd = new MySqlCommand(sql, connection))
{
    cmd.Parameters.AddWithValue("@title", title);
    cmd.Parameters.AddWithValue("@content", cleanContent);
    cmd.ExecuteNonQuery();
}

四、 避坑指南与开发总结

在这次从 PHP 到 C# 的迁移过程中,有几个坑是必须避开的:

  1. 编码问题:C# 默认是 UTF-8,如果 PHP 输出时没强制声明 header('Content-Type: application/json; charset=utf-8');,读取会乱码。
  2. 前端 XSS 攻击:虽然后端做了 SQL 防护,但前端展示 HTML 时也要注意。建议前端开发者在渲染文章内容时使用 `textContent` 而不是直接插入 innerHTML,或者做严格的 HTML 消毒。
  3. 数据类型:处理 JSON 里的日期字符串时,容易变成时间戳或者字符串类型,需要在后端做统一格式转换。

以上就是关于 EMLOG 接口对接与安全开发的技术笔记。希望能帮到正在做类似项目或者爬虫开发的朋友,少走弯路。

相关推荐

更多关于 C# 后端开发与前端交互的干货,欢迎关注零点博客的更新。