我现在使用strip_tags($content, '<a>')
标签来清除除<a>
标签之外的html标签。
示例1:Example "lorem ipsum dolor <sit amet....."
剪切掉“ <
”之后的所有内容
示例2:如果内容以"<test lorem ipsum"
开头,我只会得到空字符串。
我试图用正则表达式检查它,但是结果是一样的。
preg_replace('/<[^>]*>/', '', $content)
会返回相同的结果进行验证。
我需要以某种方式来清除html和使用的保持正确的“<
”的内容内部支架上。
答案 0 :(得分:-1)
如果您想清除除普通<a>
和</a>
之外的所有标签,可以过滤它们,替换它们,然后清除HTML并将它们替换回来,如下所示:
<?php
$text = "<a> ahahahasjusjhcbzdeu <div>JEY ssjisuj</div>jn<p> here somehing else </p></a>";
$EndText = str_replace("<a>", "&ATL", $text);
$EndText = str_replace("</a>", "&ATR", $EndText);
$EndText = strip_tags($EndText);
$EndText = str_replace("&ATL", "<a>", $EndText);
$EndText = str_replace("&ATR", "</a>", $EndText);
echo htmlspecialchars($EndText);
?>
但是,如果您想获取类似<a href="mywebsite.com"> here </a>
的内容,则该链接也会被删除。
因此,您需要过滤掉<a
和>
之间的文本(可以通过explode
,sub_str
和str_replace
进行过滤),然后执行与在上面的解决方案中,然后再次粘贴。
可以做到这一点的代码是:
<?php
$text = "<a>Here something</a><div>Again<a href='website.com'>That's a better link</a> Here</div>";
$Texts = explode("<a", $text);
$Begin = strip_tags(array_shift($Texts));
$Middles = [];
foreach ($Texts as &$value) {
$Middle = explode(">", $value)[0];
array_push($Middles, $Middle);
$Position = strpos($value, ">");
$value = substr($value, $Position+1);
$value = str_replace("</a>", "&htlENDA&", $value);
$value = strip_tags($value);
}
$EndText = $Begin;
for ($i = 0; $i < count($Texts); $i++) {
$EndText = $EndText."<a".$Middles[$i].">".$Texts[$i];
}
$EndText = str_replace("&htlENDA&", "</a>", $EndText);
echo "<br><br>Ende: ".htmlspecialchars($EndText);
?>
这将解决您的问题,因为它会删除除<a ... >
和</a>
之外的所有html标记