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

PHP 正則表達式替換自定義標籤為 HTML 鏈接

     編輯:PHP 相關知識

使用 preg_replace_callback 實現自定義標籤轉 HTML

在 CMS 或富文本編輯器中,常需將類似 BBCode 的自定義標籤(如 [link url="..."]文字[/link])轉換為標準 HTML 鏈接。本文展示如何使用 PHP 正則表達式配合回調函數安全、高效地完成替換。

核心代碼實現

<?php
$str = '你好嗎[link url="https://www.example.com"]示例鏈接[/link]再見';

/**
 * 將 [link url="..."]文字[/link] 替換為 <a href="..." target="_blank" class="col-blue">文字</a>
 */
$pattern = '/\[link url="([^"]+)"\](.*?)\[\/link\]/i';

$str = preg_replace_callback($pattern, function ($matches) {
    $url  = htmlspecialchars($matches[1], ENT_QUOTES, 'UTF-8');
    $text = htmlspecialchars($matches[2], ENT_QUOTES, 'UTF-8');
    return "<a href=\"$url\" target=\"_blank\" class=\"col-blue\">$text</a>";
}, $str);

echo $str;
// 輸出: 你好嗎<a href="https://www.example.com" target="_blank" class="col-blue">示例鏈接</a>再見
?>

關鍵點解析

  • 非貪婪匹配:(.*?) 確保匹配最近的 [/link],避免跨標籤匹配。
  • preg_replace_callback:比 preg_replace + str_replace 更安全,避免重複替換或注入風險。
  • htmlspecialchars:對 URL 和顯示文本轉義,防止 XSS 攻擊。
  • 修飾符 i:大小寫不敏感,兼容 [LINK] 寫法。

擴展:同時處理標準 HTML 鏈接

若內容同時包含標準 <a> 標籤與自定義標籤,可分步處理:

<?php
$html = '<a href="https://baidu.com">百度</a> 和 [link url="https://google.com"]Google[/link]';

// 1. 先保護現有 <a> 標籤(可選,視業務而定)
// 2. 處理自定義標籤
$pattern = '/\[link url="([^"]+)"\](.*?)\[\/link\]/i';
$html = preg_replace_callback($pattern, function ($m) {
    return '<a href="' . htmlspecialchars($m[1]) . '" target="_blank">' . htmlspecialchars($m[2]) . '</a>';
}, $html);

echo $html;
?>

最佳實踐建議

  1. 輸入過濾:儲存用戶內容時,建議統一轉換為安全的中間格式(如 Markdown 或純文本+標記),輸出時再渲染。
  2. 性能優化:高頻調用場景下,預編譯正則或使用更快的解析器(如 Parsedown for Markdown)。
  3. 白名單協議:僅允許 https://、https://、mailto: 等安全協議,過濾 javascript: 等危險協議。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved