无法从多字节输入中删除HTML标记

时间:2015-10-30 04:01:06

标签: php preg-replace multibyte

我有一个函数可以帮助从输入中删除HTML标记,如下所示。

PHP

function strip_html_tags2( $str ) 
    {
        $var_search = 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',
        );
        $var_replace = array(
            ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
            "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0",
            "\n\$0", "\n\$0",
        );
        //$str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
        $str = preg_replace("/&#?[a-z0-9]+;/i"," ", $str);
        $str = preg_replace( $var_search, $var_replace, $str );
        return strip_tags( $str );
    }

当我尝试使用下面的内容时它不起作用,结果将是一个空字符串。

<p>If you’ve had a website up since at least the beginning of the year...</p>

这可能是由单引号引起的,但我不知道如何解决这个问题。

尝试将其复制并粘贴到下面的演示页面中。

Demo

非常感谢任何建议。

0 个答案:

没有答案