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

PHP UBB 代碼解析類:正則表達式實現論壇標籤轉 HTML

     編輯:PHP 相關知識

前言

UBB (Universal Bulletin Board) 代碼是論壇常用的輕量標記語言。本文實作一個 Day::ubb() 方法,使用正則表達式將常見 UBB 標籤轉換為 HTML。注意:ereg_replace 已棄用移除,現代寫法全面改用 preg_replace。

現代化實作(preg_replace 版)

<?php
class UBBParser {
    public static function parse(string $text): string {
        // 1. 基礎處理
        $text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); // 先跳脫 HTML
        $text = nl2br($text); // 換行轉 
// 2. 標籤轉換規則(順序重要:巢狀/複雜標籤優先) $patterns = [ // [url] 與 [url=...] '/\[url\](https?:\/\/[^\]]+)\[\/url\]/i' => '$1', '/\[url\]([^\]]+)\[\/url\]/i' => '$1', '/\[url=(https?:\/\/[^\]]+)\]([^\]]+)\[\/url\]/i' => '$2', '/\[url=([^\]]+)\]([^\]]+)\[\/url\]/i' => '$2', // [color=...] [font=...] '/\[color=([^\]]+)\]([^\]]+)\[\/color\]/i' => '$2', '/\[font=([^\]]+)\]([^\]]+)\[\/font\]/i' => '$2', // [email] [email=...] '/\[email\]([^\]]+)\[\/email\]/i' => '$1', '/\[email=([^\]]+)\]([^\]]+)\[\/email\]/i' => '$2', // 文字樣式 '/\[b\]([^\]]+)\[\/b\]/i' => '$1', '/\[i\]([^\]]+)\[\/i\]/i' => '$1', '/\[u\]([^\]]+)\[\/u\]/i' => '$1', // 特效(不建議現代網站使用,保留相容性) '/\[fly\]([^\]]+)\[\/fly\]/i' => '$1', '/\[move\]([^\]]+)\[\/move\]/i' => '$1', // [shadow=color,direction,strength] 簡化為 CSS '/\[shadow=([#\w]+),(\d+),(\d+)\]([^\]]+)\[\/shadow\]/i' => '$4', ]; foreach ($patterns as $pattern => $replacement) { $text = preg_replace($pattern, $replacement, $text); } return $text; } } // 使用範例 $input = "歡迎使用 [b]UBB[/b] 代碼!訪問 [url=https://example.com]範例網站[/url]。"; echo UBBParser::parse($input); ?>

關鍵改進點

  • htmlspecialchars 先行:防止 XSS,確保使用者輸入的 HTML 字元被跳脫。
  • preg_replace 替代 ereg_replace:PCRE 正則效能更好、功能更豐富、PHP 7+ 相容。
  • rel="noopener":外部連結安全屬性。
  • CSS 替代廢棄標籤:<font>、<marquee> 改用 <span style="...">。
  • 陣列批次處理:易於維護擴充新標籤。

安全性警示

  • UBB 解析器必須先 htmlspecialchars,否則惡意使用者可注入 `
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved