2011-05-11 3 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 : "" 
       }) 

Répondre

4

replace() peut être remplacé par preg_replace()

et match() serait preg_match() qui est très puissant

Vérifiez le manuel pour voir comment il fonctionne avec votre code, ils ne sont pas différents, et vous pouvez utilisez votre fonction de rappel aussi.

+1

'preg_replace_callback()' serait le remplacement approprié dans ce cas. – mario

+0

Vous avez raison mario, merci pour l'addition – Ibu

2

Il semble que vous analysiez HTML avec regex.

Dans ce cas, PHP fournit DOMDocument ce qui est assez bon pour faire de la manipulation DOM. Vous pourrait l'utiliser s'assure que votre chaîne contient sûr HTML.

Une solution plus spécifique au domaine est HTML Purifier.

Questions connexes