2011-05-11 4 views
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

replace()은 당신이 할 수

는 그들이 서로 다른되지 않습니다, 당신의 코드를 어떻게 작동하는지 확인하기 위해 설명서를 확인 매우 강력 preg_match()preg_replace()

match()로 대체 될 수 있습니다 콜백 기능을 사용하십시오.

+1

'preg_replace_callback()'이이 경우에 적절하게 대체됩니다. – mario

+0

당신은 맞습니다 마리오, 추가 주셔서 감사합니다 – Ibu

2

HTML을 정규식으로 파싱하는 것처럼 보입니다.

그런 경우 PHP는 DOMDocument을 제공하며 이는 DOM 조작을 수행하는 데 매우 유용합니다. 당신 사용할 수 있습니다 HTML을 포함 문자열을 보장합니다.

도메인 특정 솔루션은 HTML Purifier입니다.

관련 문제