首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 將純文本自動轉換為精美 HTML 網頁完整教程

     編輯:PHP 相關知識

項目背景

某記者需將數百篇純文本專欄發布到網站,但不懂 HTML。需求:保留標題/作者/段落結構,特殊字符轉義,URL 自動轉超鏈接,一鍵生成靜態 HTML 文件。

核心轉換邏輯

<?php
// 配置
$source = "article.txt";           // 源文件
$output_dir = "./output/";         // 輸出目錄

// 1. 讀取文件為數組(每行一個元素)
$raw = file($source, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)
    or die("無法讀取源文件");

// 2. 提取標題、作者(假設前兩行)
$title = array_shift($raw);
$author = array_shift($raw);

// 3. 合併正文並處理
$body = implode("\n", $raw);

// 3.1 特殊字符轉義(防 XSS、保留原意)
$body = htmlspecialchars($body, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');

// 3.2 換行轉 
(保留段落結構) $body = nl2br($body); // 3.3 多餘空白壓縮 $body = preg_replace('/[ \t]+/', ' ', $body); // 3.4 URL 自動轉超鏈接(增強版:支持 http/https/ftp/www) $body = preg_replace_callback( '/(?:(https?|ftp):\/\/|www\.)[^\s<>"\']+/i', function ($m) { $url = $m[0]; $href = (strpos($url, '://') === false) ? "https://$url" : $url; return "$url"; }, $body ); // 4. 構建完整 HTML(引入 CSS 框架或內聯樣式) $html = <<<HTML <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>$title</title> <style> body {font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; line-height: 1.7; max-width: 800px; margin: 2rem auto; padding: 0 1rem; color: #333;} h1 {border-bottom: 2px solid #2c3e50; padding-bottom: .5rem;} .meta {color: #666; font-size: .9rem; margin-bottom: 1.5rem;} a {color: #3498db; text-decoration: none;} a:hover {text-decoration: underline;} </style> </head> <body> <article> <h1>$title</h1> <p class="meta">作者:$author | 生成時間:<?= date('Y-m-d H:i:s') ?></p> <div class="content">$body</div> </article> </body> </html> HTML; // 5. 輸出:瀏覽器預覽 或 寫入靜態文件 // 瀏覽器預覽 // echo $html; // 寫入文件(文件名基於源文件) $filename = pathinfo($source, PATHINFO_FILENAME) . '.html'; file_put_contents($output_dir . $filename, $html) or die("寫入失敗"); echo "生成成功:$output_dir$filename"; ?>

關鍵函數解析

函數作用關鍵參數
file()整文件讀入數組FILE_IGNORE_NEW_LINES 去除行尾換行符
array_shift()彈出數組首元素依次提取標題、作者
htmlspecialchars()轉義 < > & ' "ENT_QUOTES | ENT_SUBSTITUTE 雙引號+無效字符替換
nl2br()\n → <br>保留原始換行結構
preg_replace_callback()URL 智能識別與替換支持 www. 開頭、自動補全協議、rel="noopener" 安全

進階擴展建議

  • Markdown 支持:引入 erusev/parsedown,源文件用 Markdown 寫作,渲染更豐富
  • 批量處理:遍歷目錄 glob("articles/*.txt"),生成索引頁 + RSS Feed
  • 圖片本地化:正則提取 <img> 外鏈,下載存儲並重寫 src
  • 模板引擎:Twig/Blade 分離邏輯與視圖,支持繼承、塊、過濾器
  • 部署自動化:Git Hook / CI/CD 監聽文件變更,自動構建靜態站點部署到 CDN

一鍵批量生成腳本

<?php
// batch_convert.php
$srcDir = __DIR__ . '/articles';
$outDir = __DIR__ . '/public';
$tpl = file_get_contents(__DIR__ . '/template.html');

foreach (glob("$srcDir/*.txt") as $file) {
    $lines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $title = array_shift($lines);
    $author = array_shift($lines);
    $body = implode("\n", $lines);
    
    $body = nl2br(htmlspecialchars($body, ENT_QUOTES, 'UTF-8'));
    $body = preg_replace_callback('/(https?:\/\/|www\.)\S+/i', fn($m)=><a href=\"$m[0]\" target=\"_blank\">$m[0]</a>, $body);
    
    $html = str_replace(
        ['{{title}}', '{{author}}', '{{body}}', '{{date}}'],
        [$title, $author, $body, date('Y-m-d')],
        $tpl
    );
    
    $outFile = "$outDir/" . basename($file, '.txt') . '.html';
    file_put_contents($outFile, $html);
    echo "✓ $outFile\n";
}
echo "批量完成!\n";

避坑提醒:源文件編碼必須為 UTF-8(含 BOM 會導致標題異常),建議編輯器統一設置「UTF-8 without BOM」;生成的 HTML 檔案名避免中文,防服務器兼容性問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved