零点博客复盘:从EMLOG PHP迁移C#,手写HTML模板与SQL注入深度防护实战

说实话,折腾了几年 EMLOG 后,我越来越觉得静态页面的扩展性是个大问题。为了搞清楚 C# 后端到底能不能高效渲染 HTML,我特意在零点博客做了一个小实验:把 MySQL 数据库里的文章按需读取,拼成标准 HTML 输出。结果非常惊喜,SEO 效果和响应速度都提升了。

为什么放弃 PHP 直接生成 HTML?

很多人问,现在不是流行 JSON 和 Vue 吗?确实,做接口开发时 JSON 是王者,但对于搜索引擎爬虫来说,原生 HTML 才是最友好的。直接输出 HTML 能让百度和必应最快抓取到内容结构。今天就把这个过程还原一下,全是干货。

第一步:建立连接,读取 MySQL 数据

在 C# 后端,我们通常用 ADO.NET。为了防止SQL注入,千万别直接拼接字符串!

// 避坑指南:使用参数化查询
string sql = "SELECT title, content FROM emlog_articles WHERE status=1 ORDER BY date DESC";
using (SqlConnection conn = new SqlConnection(YourConnectionString))
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
    conn.Open();
    using (SqlDataReader reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            // 构建数据对象
            var article = new Article { Title = reader["title"].ToString(), Body = reader["content"].ToString() };
            // 传给下一步渲染
            RenderHTML(article); 
        }
    }
}

第二步:手写 HTML 模板与正则清洗

拿到数据库内容后,我们要把它变成浏览器能懂的代码。这里核心关键词就是 HTML。

string GetArticleHtml(Article article)
{
    // 简单的 HTML 结构拼接
    return $"
" + $"

{article.Title}

" + $"
{article.Body}
" + $"
"; }

这里有个技术点:很多爬虫开发会遇到 HTML 标签混乱的问题。在渲染之前,我会用正则表达式对文章内容做一次清洗,把多余的空标签过滤掉,保证输出给浏览器的 HTML 是干净的。

第三步:如何实现接口开发与 JSON/HTML 双输出?

在实际项目中,前端要数据,爬虫要页面。我们可以根据 Request Header 判断。

  • 如果是请求 API,就用 JavaScriptSerializer 返回 JSON 数据,方便前端调用。
  • 如果是浏览器直接访问,就用上述方法直接输出 HTML 文档。

实战避坑:爬虫抓取注意什么?

做接口开发时,经常会遇到有人通过爬虫抓取你的内容。这时候要注意:

  1. Content-Type:确保服务端正确设置 `text/html` 或 `application/json`,不要让爬虫误判。
  2. robots.txt:遵守协议,别把后台代码目录暴露出去。
  3. 防刷:对于高频请求的爬虫,C# 后端可以结合 Redis 做简单的频率限制。

总结

这次迁移让我明白了,C# 的强类型和预处理语句在写后台时能极大减少 SQL 注入的风险。而通过手写 HTML 模板,我们既保证了内容的 SEO 友好,又能灵活地处理复杂的排版需求。在零点博客后续的开发中,这种“后端渲染 + 前端交互”的混合模式,确实是目前的最佳实践。

如果你也想从 EMLOG 迁移或者做类似的接口开发,记得先做好数据备份,尤其是 MySQL 的数据结构!