零点博客复盘:从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 文档。
实战避坑:爬虫抓取注意什么?
做接口开发时,经常会遇到有人通过爬虫抓取你的内容。这时候要注意:
- Content-Type:确保服务端正确设置 `text/html` 或 `application/json`,不要让爬虫误判。
- robots.txt:遵守协议,别把后台代码目录暴露出去。
- 防刷:对于高频请求的爬虫,C# 后端可以结合 Redis 做简单的频率限制。
总结
这次迁移让我明白了,C# 的强类型和预处理语句在写后台时能极大减少 SQL 注入的风险。而通过手写 HTML 模板,我们既保证了内容的 SEO 友好,又能灵活地处理复杂的排版需求。在零点博客后续的开发中,这种“后端渲染 + 前端交互”的混合模式,确实是目前的最佳实践。
如果你也想从 EMLOG 迁移或者做类似的接口开发,记得先做好数据备份,尤其是 MySQL 的数据结构!



评论一下吧
取消回复