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

13

在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可能不是正确的方法,对吗?)


简单的方法是去除标签,我不确定正则表达式 https://dev59.com/X3I-5IYBdhLWcg3wq6do - Danijel
那么我们对这个问题的进展如何了? - Rizier123
5个回答

26
不需要用正则表达式,在这里只需使用strip_tags()函数来去除所有HTML标签,然后简单地对输出进行trim()处理即可,例如:
$newArray = array_map(function($v){
    return trim(strip_tags($v));
}, $m);

补充JessGabriel的回答:从PHP 8.1开始,您无法将NULL传递给内部函数参数(https://php.watch/versions/8.1/internal-func-non-nullable-null-deprecation)。因此,对于strip_tags,我有一个快速而简单的if语句(if (is_null($v))),以便它不会抛出错误。 - TechJunkie
这是一个非常棒的解决方案,简单而且相当快速。请注意,传递的数组需要是一维数组才能正常工作。@TechJunkie感谢您提醒检查“null”值。 - Kathara

3
如果你想使用正则表达式方法,可以简单地按照以下步骤操作:
$array = preg_replace("/<.+>/sU", "", $array);

3

1
这是一个针对多维数组进行对象检查的变体。

/**
     * @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;
    }


许多对象都有toString()方法或可以进行(string)$转换。 - Eugene Kaurov

0

对于关联的多维数组,我更喜欢使用array_walk_recursive

array_walk_recursive(
    $array, 
    function(&$string) {
        if (is_string($string)) {
            $string = trim(strip_tags($string));
        }
    }
);

请参阅文档:https://www.php.net/manual/zh/function.array-walk-recursive.php

如果您对数据有信心,那么可以跳过is_string的检查:

array_walk_recursive($stepViewEntity, 'strip_tags');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接