几乎所有的浏览器在呈现无效的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