在內容處理、摘要生成、數據入庫前,常需同時「去標籤」與「去多餘空白」。封裝一個 deletehtml() 函數可一站式解決。
<?php
/**
* 移除 HTML 標籤並清理空白字符
* @param string $str 原始字符串
* @return string 處理後的純文本
*/
function deletehtml($str) {
$str = trim($str); // 1. 去首尾空白
$str = strip_tags($str, "<p>"); // 2. 去標籤,保留 <p>(可按需調整)
$str = preg_replace("/\t/", "", $str); // 3. 去制表符
$str = preg_replace("/\r\n/", "", $str); // 4. 去 Windows 換行
$str = preg_replace("/\r/", "", $str); // 5. 去 Mac 換行
$str = preg_replace("/\n/", "", $str); // 6. 去 Linux 換行
$str = preg_replace("/ /", "", $str); // 7. 去普通空格
$str = preg_replace("/ /", "", $str); // 8. 去 HTML 空格實體
return trim($str); // 9. 最終修飾
}
?>
strip_tags($str, '<p>') 第二參數為允許保留的標籤白名單,可傳字符串或數組(如 ['<p>', '<br>']),若不需保留任意標籤可省略或傳 ''。/\t/、/\r\n/ 等需用雙引號或轉義,單引號下 \t 不會被解析為制表符。preg_replace 合併為一條正則:preg_replace('/[\s\x{00a0}]+/u', '', $str)(需 u 修飾符支持 Unicode),效率更高。<?php
function clean_html_text($str, $allowed_tags = '') {
$str = trim($str);
$str = strip_tags($str, $allowed_tags);
// 一次性移除所有空白字符(含空格、換行、制表、不換行空格 )
$str = preg_replace('/[\s\x{00a0}]+/u', '', $str);
return trim($str);
}
// 使用示例
echo clean_html_text("<p>Hello <b>World</b></p>\n\t", '<p>'); // 輸出:HelloWorld(保留 p 標籤但內容無空格)
?>
提示:若需保留單詞間空格(如生成摘要),請將正則改為 preg_replace('/\s+/', ' ', $str) 僅合併連續空白為單個空格。