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

PHP 移除 HTML 標籤與 UTF-8 安全截取完整指南

     編輯:PHP 相關知識

移除 HTML 標籤

strip_tags() 基本用法

$html = '

這是粗體文字,含連結。

'; echo strip_tags($html); // 輸出:這是粗體文字,含連結。

保留特定標籤

echo strip_tags($html, '');

常見誤區

  • `strip_tags()` **不處理 HTML 實體**(`<`、`&` 保持原樣)。
  • 屬性值內的 `>` 可能導致誤判(舊版 PHP),建議 PHP 5.3.4+。
  • **不防止 XSS**:`` 移除標籤後剩 `alert(1)` 仍危險。

UTF-8 安全截取函式

問題:substr() 切斷多位元組

$str = "中文測試";
echo substr($str, 0, 3); // 輸出:中 (第三個位元組被切斷)

解決方案:preg_match_all + array_slice

/**
 * UTF-8 安全截取
 * @param string $str  字串
 * @param int    $start 起始字元索引 (0-based)
 * @param int|null $length 截取字元數,null 表示截到結尾
 * @return string
 */
function utf8_substr($str, $start, $length = null) {
    // 將字串拆解為單一字元陣列 (支援 UTF-8)
    preg_match_all('/./us', $str, $matches);
    $chars = $matches[0];

    // 陣列切片
    $slice = is_null($length)
        ? array_slice($chars, $start)
        : array_slice($chars, $start, $length);

    return implode('', $slice);
}

使用範例

$str = "Hello 世界!PHP 編碼測試。";

echo utf8_substr($str, 0, 10);   // Hello 世界
echo utf8_substr($str, 6);       // 界!PHP 編碼測試。
echo utf8_substr($str, -8, 4);   // 編碼測 (負索引需自行換算)

進階:mbstring 版本(效能更好)

function mb_utf8_substr($str, $start, $length = null) {
    if (is_null($length)) {
        return mb_substr($str, $start, null, 'UTF-8');
    }
    return mb_substr($str, $start, $length, 'UTF-8');
}

**前提**:PHP 安裝 `mbstring` 擴充套件(現代環境預設啟用)。

綜合應用:文章摘要產生器

function generate_excerpt($html, $length = 200, $suffix = '...') {
    // 1. 移除標籤
    $text = strip_tags($html);

    // 2. 解碼實體 (可選)
    $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');

    // 3. 截取
    $excerpt = mb_utf8_substr($text, 0, $length);

    // 4. 重新編碼實體並加後綴
    return htmlspecialchars($excerpt, ENT_QUOTES, 'UTF-8') . $suffix;
}

效能比較

函式原理效能相依性
`strip_tags()`C 內建狀態機極快無
`preg_match_all('/./us')`PCRE Unicode 掃描中等PCRE (內建)
`mb_substr()`mbstring 內建快mbstring
`HTMLPurifier`完整 HTML 解析樹慢Composer 套件

最佳實務建議

  1. **摘要/列表頁**:`strip_tags()` + `mb_substr()` 組合,速度快、記憶體低。
  2. **使用者輸入儲存**:**不**預先 `strip_tags()`,保留原始輸入,**輸出時** 視情境用 `htmlspecialchars()` 或 `HTMLPurifier`。
  3. **編碼統一**:專案全域 UTF-8,資料庫 `utf8mb4`,PHP `default_charset = "UTF-8"`。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved