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

Posted

技术标签:

【中文标题】如何从数组中删除所有 html 标签?【英文标题】:How can I remove all html tags from an array? 【发布时间】:2015-12-13 09:26:26 【问题描述】:

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 可能不是要走的路,不是吗?)

【问题讨论】:

简单的方法是去掉标签,我不确定正则表达式***.com/questions/1732348/… 那么这个问题我们在哪里? 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

array_map() 和 strip_tags()

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

修剪的原理相同。

【讨论】:

【参考方案4】:

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


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

【讨论】:

以上是关于如何从数组中删除所有 html 标签?的主要内容,如果未能解决你的问题,请参考以下文章

Python/BeautifulSoup - 如何从元素中删除所有标签?

使用 python 和 lxml 模块从 html 中删除所有 javascript 标签和样式标签

从 Javascript/React Native 中的多个字符串数组中删除 html 标签

使用 Python 和 Regex,如何从 html 中删除 <sup> 标签? [复制]

使用 JS 正则表达式从 html 中删除所有脚本标签

如何在记事本++中删除除html标签和此HTML标签内容之外的所有内容?