【发布时间】:2009-06-11 03:41:49
【问题描述】:
有没有人有一个使用 Javascript 查找字符串是否包含格式错误的 XHTML 的好方法?
由于我的页面允许“用户”生成的 XHTML 返回(用户可以被信任)并将其注入 DOM,我想要一种方法来检查是否有未关闭或过度关闭的标签,并且将它们编码为< 和>,以便将错误简单地显示为文本。这样所有有效的 xhtml 仍然会显示,而无效的将简单地成为文本节点,允许脚本至少继续错误。
这是我做的类似方法,比较粗糙。它有一个不同的目的(只是剥离所有有效的 xhtml 标签并保留其余标签。它通过递归选择最里面的标签并将它们剥离出来。
stripHTML: function(html) {
var validXHTML = /<(\S+).*>(.*?)<\/\1>/i;
var validSelfClose = /<(input|img|br|hr)[^>]*\/>/gi;
html = html.replace(validSelfClose, '');
if(validXHTML.test(html)) {
var loc = html.search(validXHTML);
var str = html.match(validXHTML);
html = html.substr(0, loc) +
strings.addPunctuation(html.substr(loc, str[0].length).replace(validXHTML, '$2')) +
html.substr((loc+str[0].length), html.length);
if(validXHTML.test(html)) {
html = strings.stripHTML(html);
} else {
return html;
}
}
return html;
}
请随意改进上述内容,或回答实际问题。
更新
我的想法至少可以适应大多数情况的简单方法是这样的:
encode all > 和
将内的所有标签名改为小写
递归工作,从最里面的标签开始,将它们从小写更改为大写 <li>something</li> 变为 <LI>something</LI>
递归结束后,去掉所有其他的 > 和
将所有大写标签切换回小写
除了需要相当长的时间之外,是否可以立即预见到任何问题?
【问题讨论】:
-
尝试在 refactormycode.com 中发布代码
-
任何此类程序都会遇到的一个问题是确定哪些标签是错误标签...考虑片段 hi;您要编码哪些标签?
-
@Strobor,我很懒,但我会在许多不同的浏览器中尝试特定的代码,看看它们做了什么。我怀疑他们中的大多数人会在内部将其理解为 hi
-
"任何此类程序都会遇到的一个问题是确定哪些标签是错误的...考虑片段 hi;您想对标签进行编码吗?”在所有嵌套标签终止之前终止的任何内容,或在其父标签终止之前未终止的任何内容。在这种情况下,应删除所有标签。
标签: javascript html regex xhtml tags