如何从数组中删除所有html标签?

时间:2015-09-16 17:01:43

标签: php html arrays regex string

在php中是否有一个函数可以对数组的所有条目执行正则表达式替换操作? 我有一个数组,其中包含许多带有文本的html标签,我想删除这些标签 所以基本上我转换这个:

$m = [
"<div>first string </div>",
"<table>
   <tr>
     <td style='color:red'>
       second string
     </td>
   </tr>
 </table>",
"<a href='/'>
   <B>third string</B><br/>
 </a>",
];

到此:

$m = [
"first string",
"second string",
"third string"
]

正(我希望)匹配我要删除的所有内容的正则表达式如下所示:

/<.+>/sU

问题是我现在应该如何使用它? (我的数组实际上有超过50个条目,并且在每个条目中可能有10个匹配,所以使用preg_replace可能不是可行的方式,或者是它?)

4 个答案:

答案 0 :(得分:17)

这里不需要正则表达式,只需使用strip_tags()删除所有html标签,然后只需输出trim(),例如

$newArray = array_map(function($v){
    return trim(strip_tags($v));
}, $m);

答案 1 :(得分:3)

如果你想要正则表达式方法,你可以简单地执行以下操作:

$array = preg_replace("/<.+>/sU", "", $array);

答案 2 :(得分:0)

array_map()strip_tags()

$m = array_map( 'strip_tags', $m );

同样的原则适用于修剪。

答案 3 :(得分:0)

这是带有对象检查的多维数组的变体


/**
     * @param array $input
     * @param bool $easy einfache Konvertierung für 1-Dimensionale Arrays ohne Objecte
     * @param boolean $throwByFoundObject
     * @return array
     * @throws Exception
     */
    static public function stripTagsInArrayElements(array $input, $easy = false, $throwByFoundObject = true)
    {
        if ($easy) {
            $output = array_map(function($v){
                return trim(strip_tags($v));
            }, $input);
        } else {
            $output = $input;
            foreach ($output as $key => $value) {
                if (is_string($value)) {
                    $output[$key] = trim(strip_tags($value));
                } elseif (is_array($value)) {
                    $output[$key] = self::stripTagsInArrayElements($value);
                } elseif (is_object($value) && $throwByFoundObject) {
                    throw new Exception('Object found in Array by key ' . $key);
                }
            }
        }
        return $output;
    }