2010-08-04 90 views
2

幾乎所有的瀏覽器在呈現無效的HTML時都會有一定的餘地。例如,他們會渲染x < y,就好像它被編寫爲x &lt; y一樣,因爲它「清楚」<的目的是作爲文字字符,而不是HTML標記的一部分。無效的HTML呈現邏輯

我在哪裏可以找到該邏輯作爲單獨的「清理」模塊?這樣的模塊會將x < y轉換爲x &lt; y

+0

你在用什麼?如果你正在渲染用戶內容,那麼最好是逃避誰和輸出它。如果你正在寫渲染引擎......祝你好運。 – 2010-08-04 17:52:36

+0

我正在渲染用戶內容,但我想保留某些「安全」標籤。我已經在使用刪除「不安全」標籤的模塊,但它也刪除了看起來像無法識別標籤的無效HTML。在將它交給模塊之前,我想「清理它」。 – JoelFan 2010-08-04 17:56:20

+0

檢查我的答案,你可以做到這一點沒有任何模塊 – 2010-08-04 18:03:17

回答

3

請試試看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 &lt; y 
</body> 
</html> 

注意x < y改爲x &lt; y

UPDATE

基於您的評論,你應該使用整潔清理你的HTML。我相信大多數常用語言都有Tidy庫,可以爲您清理HTML。如果您使用PHP,則有PHP Tidy

UPDATE

我注意到,你說你正在使用C#。您也可以在C#中使用Tidy。這是我找到的東西。我不C#開發,我還沒有嘗試過這一點,所以因人而異:在瀏覽器中

Fix Up Your HTML with HTML Tidy and .NET

0

不確定你的意思到底是什麼,但也許PHP函數htmlentities可以幫助你。

+0

沒有......看到我回應@Mike卡隆的評論 – JoelFan 2010-08-04 17:57:44

0

渲染無效的HTML的是可怕的猜測,你真的不應該試圖效仿它(它將打破)。但是,更換一些事件可能與正則表達式來完成:

preg_replace('/(\s)<(\s)/', '$1&lt;$2', $data); 
+0

這將改變''< body>到'<體>'。不可取的。 – 2010-08-04 18:01:24

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Chuck 2010-08-04 18:29:58

+0

@Vivin:是的。它在一定程度上依賴於用戶正確地格式化他們的輸入,但它相當好。 @Chuck:我們實際上並不是在這裏解析HTML,而是。 – You 2010-08-04 19:43:10

-1

編輯:我假設你正在使用PHP,因爲你沒有指定

使用用strip_tags:

$content = strip_tags($content, array('<b><i>')); 

這將留下安全標籤(由您定義),並刪除其他所有內容。

+2

這是一個很大的假設 – Quentin 2010-08-04 18:11:37

+0

我沒有使用PHP,但我在C#中使用類似於strip_tags的東西。問題是我的「strip_tags」認爲「x JoelFan 2010-08-04 18:18:39

+0

@David這是最常見的Web開發語言。而且,其他人也都這樣認爲。責任在OP上指定,對吧? – 2010-08-04 20:02:01