1
var okTags = /^(<\/?(b|blockquote|code|del|dd|dl|dt|em|h1|h2|h3|i|kbd|li|ol|p|pre|s|sup|sub|strong|strike|ul)>|<(br|hr)\s?\/?>)$/i;

var okLinks = /^(<a\shref="(\#\d+|(https?|ftp):\/\/[-A-Za-z0-9+&@#\/%?=~_|!:,.;\(\)]+)"(\stitle="[^"<>]+")?\s?>|<\/a>)$/i;


var okImg = /^(<img\ssrc="https?:(\/\/[-A-Za-z0-9+&@#\/%?=~_|!:,.;\(\)]+)"(\swidth="\d{1,3}")?(\sheight="\d{1,3}")?(\salt="[^"<>]*")?(\stitle="[^"<>]*")?\s?\/?>)$/i;


text = text.replace(/<[^<>]*>?/gi, function (tag) {
                    return (tag.match(okTags) || tag.match(okLinks) || tag.match(okImg)) ? tag : ""
                })
4

2 回答 2

4

replace()可以用preg_replace()代替

并且match()preg_match()非常强大

查看手册以了解它如何与您的代码一起使用,它们并没有什么不同,您也可以使用回调函数。

于 2011-05-11T06:12:58.610 回答
2

看起来您正在使用正则表达式解析 HTML。

在这种情况下,PHP 提供了DOMDocument,它非常适合进行 DOM 操作。您可以使用它来确保您的字符串包含安全的HTML。

更具体的领域解决方案是HTML Purifier

于 2011-05-11T06:25:50.663 回答