$html = '這是粗體文字,含連結。
';
echo strip_tags($html);
// 輸出:這是粗體文字,含連結。
echo strip_tags($html, '');
$str = "中文測試";
echo substr($str, 0, 3); // 輸出:中 (第三個位元組被切斷)
/**
* 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); // 編碼測 (負索引需自行換算)
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 套件 |