vbScript到PHP的翻译:正则表达式删除HTML标签


vbScript to PHP Translation: Regular Expression to remove HTML tags

我正在将经典ASP (vbscript)的函数翻译成PHP。我已经做了尝试,但我不确定我的代码是正确的,所以我想问别人。

下面的vbscript函数包含一个正则表达式来删除html标签。(正则表达式来自http://regexplib.com)。下面是需要翻译的vbScript代码:

Function StripTags(ByVal szString,ByVal szTags)
If szTags = "" Then szTags = "[a-zA-Z]+"
Dim regEx : Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True
' tag to remove (based on http://regexplib.com/REDetails.aspx?regexp_id=211)
regEx.Pattern = "</?("+szTags+")('s+'w+=('w+|""[^""]*""|'[^']*'))*'s*?/?>"
StripTags = regEx.Replace(szString, "")
Set regEx = Nothing
End Function

我发现PHP有一个名为strip_tags($szString)的内置函数。这个函数和上面的代码做同样的事情吗?

我还在这个板上发现了一个更复杂的PHP HTML删除功能,但我不确定它是否做同样的事情:

function StripTags($szString,$szTags){
$szString = preg_replace(
array(
// Remove invisible content
'@<head[^>]*?>.*?</head>@siu', 
'@<style[^>]*?>.*?</style>@siu',
'@<script[^>]*?.*?</script>@siu',
'@<object[^>]*?.*?</object>@siu',
'@<embed[^>]*?.*?</embed>@siu',
'@<applet[^>]*?.*?</applet>@siu',
'@<noframes[^>]*?.*?</noframes>@siu',
'@<noscript[^>]*?.*?</noscript>@siu',
'@<noembed[^>]*?.*?</noembed>@siu',
// Add line breaks before and after blocks
'@</?((address)|(blockquote)|(center)|(del))@iu',
'@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu',
'@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu',
'@</?((table)|(th)|(td)|(caption))@iu',
'@</?((form)|(button)|(fieldset)|(legend)|(input))@iu',
'@</?((label)|(select)|(optgroup)|(option)|(textarea))@iu',
'@</?((frameset)|(frame)|(iframe))@iu',),
array(
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
"'n'$0", "'n'$0", "'n'$0", "'n'$0", "'n'$0", "'n'$0",
"'n'$0", "'n'$0",
),
$szString );
$szString = strip_tags( $szString);
return;}

有没有人能告诉我上面的PHP函数是否和VBscript函数一样?

我认为你可以改变PHP分隔符,以允许ASP VBSCRIPT的。您最好不要翻译一个经典的asp页面,而是尝试在Apache上安装经典的asp支持。

是否有一个很好的理由进行转换?

FWIW, strip_tags()可以通过传递数组作为第二个参数来调整排除某些标签。也就是说,你不可能总是准确地用regex解析HTML,最终你最好使用HTML Tidy这样的扩展。

编辑:啊,这是我正在寻找的另一个链接:HTML Purifier