uh($str) 使用 preg_replace 針對用戶提交的 HTML 內容進行清理,目標:
<script>, <iframe>, <style>, <html>, <body>, <title>, <link>, <meta>, <? ... ?>, <% ... %>。onclick, onload, onerror 等)。function uh($str) {
$farr = array(
"/\s+/", // 多餘空白
"/<(\/?)(script|i?frame|style|html|body|title|link|meta|\?|\%)([^>]*?)>/isU", // 高危標簽
"/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU" // 事件屬性
);
$tarr = array(
" ", // 空白替換為單空格
"<\\1\\2\\3>", // 保留標簽結構但大寫? 實際效果存疑,建議直接置空 ""
"\\1\\2" // 移除事件屬性,保留標簽其餘部分
);
return preg_replace($farr, $tarr, $str);
}
"<\\1\\2\\3>" 實際上**保留了標簽** (如 `