如何只删除字符串中的html标签?

时间:2012-07-10 11:54:11

标签: php regex

我编写了用于删除HTML标记的代码,但它也删除了a<b类型的字符串。我希望它不要删除2<3a<b等字符串。

$term="a<b";
echo "Text is--->".preg_replace('/(?:<|&lt;).+?(?:>|&gt;)/', '', $term);

如何在不删除LT或GT的情况下删除字符串中的html标记?

5 个答案:

答案 0 :(得分:10)

抱歉,我没有足够的验证。

我已经检查了下面的php5-cli表达式。

(?:<|&lt;)\/?([a-zA-Z]+) *[^<\/]*?(?:>|&gt;)

PHP代码:

#!/usr/bin/php 
<?php

$str = "<html></html>
a<b 1<2 3>1 
<body>1>2</body>
<style file=\"'googe'\" alt=\"google\">hello world</style>
<have a good efghijknopqweryuip[]asdfgghjkzxcv bnm,.me>hello world<> google com</s>
<a se=\"font: googe;\">abcde</a>";

echo "text--->".preg_replace('/(?:<|&lt;)\/?([a-zA-Z]+) *[^<\/]*?(?:>|&gt;)/', '', $str)."\n";

?>

结果:

text--->
a<b 1<2 3>1 
1>2
hello world
hello world<> google com
abcde

答案 1 :(得分:8)

使用php的带标签功能

echo strip_tags($html)

答案 2 :(得分:1)

Strip_tags功能是很好的解决方案。

但是如果你需要正则表达式,请使用下面的表达式。

(?:<|&lt;)\/?([a-z]+) *[^\/(?:<|&lt;)]*?(?:>|&gt;)

答案 3 :(得分:1)

从包含内容的PHP字符串中删除所有HTML标记!

假设您有字符串包含锚标记,并且您想要使用内容删除此标记,那么此方法将有所帮助。

$srting = '<a title="" href="/index.html"><b>Some Text</b></a> a<b';

echo strip_tags_content($srting);

function strip_tags_content($text) {

    return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);

 }

输出:

  

a&lt; B'/ P>

取自:Remove all html tags from php string

答案 4 :(得分:-1)

使用strip_tags

//If you want to allow some tags
$term = strip_tags($term,"<b>");