幾乎所有的瀏覽器在呈現無效的HTML時都會有一定的餘地。例如,他們會渲染x < y
,就好像它被編寫爲x < y
一樣,因爲它「清楚」<
的目的是作爲文字字符,而不是HTML標記的一部分。無效的HTML呈現邏輯
我在哪裏可以找到該邏輯作爲單獨的「清理」模塊?這樣的模塊會將x < y
轉換爲x < y
幾乎所有的瀏覽器在呈現無效的HTML時都會有一定的餘地。例如,他們會渲染x < y
,就好像它被編寫爲x < y
一樣,因爲它「清楚」<
的目的是作爲文字字符,而不是HTML標記的一部分。無效的HTML呈現邏輯
我在哪裏可以找到該邏輯作爲單獨的「清理」模塊?這樣的模塊會將x < y
轉換爲x < y
請試試看Tidy的源代碼。通過整理運行前
HTML:
<html>
<head>
<title>boo</title>
</head>
<body>
x < y
</body>
</html>
經過整理後運行相同的HTML:
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
<title>boo</title>
</head>
<body>
x < y
</body>
</html>
注意x < y
改爲x < y
。
UPDATE
基於您的評論,你應該使用整潔清理你的HTML。我相信大多數常用語言都有Tidy庫,可以爲您清理HTML。如果您使用PHP,則有PHP Tidy。
UPDATE
我注意到,你說你正在使用C#。您也可以在C#中使用Tidy。這是我找到的東西。我不C#開發,我還沒有嘗試過這一點,所以因人而異:在瀏覽器中
渲染無效的HTML的是可怕的猜測,你真的不應該試圖效仿它(它將打破)。但是,更換一些事件可能與正則表達式來完成:
preg_replace('/(\s)<(\s)/', '$1<$2', $data);
編輯:我假設你正在使用PHP,因爲你沒有指定
使用用strip_tags:
$content = strip_tags($content, array('<b><i>'));
這將留下安全標籤(由您定義),並刪除其他所有內容。
根據瀏覽器處理壞標記的方式,HTML 5(草案)規範包括a detailed parsing algorithm。
你在用什麼?如果你正在渲染用戶內容,那麼最好是逃避誰和輸出它。如果你正在寫渲染引擎......祝你好運。 – 2010-08-04 17:52:36
我正在渲染用戶內容,但我想保留某些「安全」標籤。我已經在使用刪除「不安全」標籤的模塊,但它也刪除了看起來像無法識別標籤的無效HTML。在將它交給模塊之前,我想「清理它」。 – JoelFan 2010-08-04 17:56:20
檢查我的答案,你可以做到這一點沒有任何模塊 – 2010-08-04 18:03:17