2011-12-11 276 views
3

目前,我使用strip_tags,从我处理的字符串中删除所有的html标签。然而,我注意到最近,它加入的话,它包含在标签去除 即删除html标签

$str = "<li>Hello</li><li>world</li>"; 
$result = strip_tags($str); 
echo $result; 
(prints HelloWorld) 

你怎么能解决这个得到什么?

+3

嗯,你的字符串中没有空格,为什么PHP应该插入它们(以及where)?认为它是简单的替换功能。 –

+2

嗨费利克斯。我明白你的意思。事情是,这是非常普遍的事情。假设您需要从文档中提取标签,在数据库中插入纯文本以进行全文搜索。您如何确保内容清晰且格式正确? – Thomas

+0

这就像鸡和鸡蛋一样,你想删除HTML标签,但是保持原文的格式,很难保持双方的平衡。如果你想迎合全文搜索,有很多方式... – ajreal

回答

1

你会用htmlentities()

更好它不会删除<>,但逃脱他们。

+0

嗨。问题是我不想要任何标签(编码或不是) – Thomas

+0

为什么你想要用户输入标签来删除它们? –

+1

它不是用户输入 – Thomas

2

这一切都取决于剥离HTML标签后你想要的输出。例如:

如果你想<li>标签中的项目普通列表进行转换,我建议你使用str_replace*</li>\n更换<li>

strip_tags的建议是在没有任何其他转换的情况下摆脱HTML标签。

+0

本质上,我想要一个字符串,所有的html标签被删除而不会搞乱原文(连接词等)。 – Thomas

2

这将用空格替换所有html标记(实际上,不检查它是否为html),然后将可能的双空白替换为单个空格并删除开始或结束的空格。

$str = preg_replace("/<.*?>/", " ", $str); 
$str = trim(str_replace(" ", " ", $str)); 
+2

http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html –

2

你可以玩这正则表达式模式是最好的,什么来代替:)

// ------------------------------------ 

function strip_html_tags($string) { 

    $string = str_replace("\r", ' ', $string); 
    $string = str_replace("\n", ' ', $string); 
    $string = str_replace("\t", ' ', $string); 
## $string = str_replace("<li>', "\n* ", $string); 

## $pattern = "/<.*?>/"; 
    $pattern = '/<[^>]*>/'; 

    $string= preg_replace ($pattern, ' ', $string); 

    $string= trim(preg_replace('/ {2,}/', ' ', $string)); 

return $string; 

} 

// ------------------------------------ 

您还可以添加特殊替换项,如:'<li>'"\n* " ...或whateve r :)

1
echo strip_tags(str_replace('>', '> ', $string)); 

这应该做你正在寻找的所有情况下。

1

从你的代码中我发现在Hello Word和你不希望strip_tags函数为你添加它之间没有初始空间,所以为了使strip_tags函数能够生成你想要的东西,我添加了第一个列表标签之后的空格,结果是Hello world。

您可以复制并粘贴此代码并运行以查看差异。

$str = "<li>Hello</li> <li>world</li>"; 
    $result = strip_tags($str); 
    echo $result; 
    //Expected result after Execution is Hello world 
+0

你为什么把它变成一个社区维基? –

+0

,因为我收到了一条消息,表示我可以这样做,会造成伤害吗?或者我做错了什么? –

+0

没有伤害,但是现在这个答案你不会得到声望点。 –