PHP去除字符串中的HTML标签

12

我有一个字符串:

<p justify;"="">Vers­lo cent­rai Lie­tu­vos ne­kil­no­ja­mo­jo turto plėt­ros aso­cia­ci­jos kon­kur­se  ...</p>

and want want remove tag

<p justify;"=""></p>

我的代码:

$content = strip_tags($text, '<p>');

但我得到了空字符串:string(0) "",我做错了什么吗?
6个回答

19

尝试这样表达

$content = strip_tags($text);

或者你可以像这样使用正则表达式来完成:

$content = preg_replace('/<[^>]*>/', '', $text);

通过这个 $content = strip_tags($text, '<p>'); 你允许在字符串中使用 <p> 标签。

更多信息请查看链接 http://php.net/manual/en/function.strip-tags.php


它不起作用。我刚在我的电脑上测试了一下,第一个不匹配的引号是问题所在。即使有那个古怪的分号,只要他没有那个第一个引号,strip_tags也能正常工作... - Adam Plocher
@MihaiIorga 我同意你的观点。这可能是一个打字错误。 - Toretto

5
由于HTML格式不规范,您可能需要编写自己的正则表达式以删除标签或在尝试删除标签之前清理HTML。
您可以尝试使用以下方法删除所有“看起来像”标签:
$str = preg_replace("/<.*?>/", " ", $str);

真的吗?为什么WordPress会使用不匹配的引号? - Adam Plocher
这对我有效。strip_tags仅将标签转换为其他字符。 - Tepken Vannkorn

4
这将删除所有东西 - 标签、ASCII码、换行符,只保留纯文本:
strip_tags(preg_replace('/<[^>]*>/','',str_replace(array("&nbsp;","\n","\r"),"",html_entity_decode($YOUR_STRING,ENT_QUOTES,'UTF-8'))));

在我删除了'UTF-8'作为第二个参数(需要是整数)之后,这对我起了作用。 - Alive to die - Anant

4

由于您的HTML格式不正确,您可以选择使用preg_replace()方法:

$text = '<p justify;"="">Vers­lo cent­rai Lie­tu­vos ne­kil­no­ja­mo­jo turto plėt­ros aso­cia­ci­jos kon­kur­se ... </p>';
$content = preg_replace('/<[^>]*>/', '', $text); 
var_dump($content);
// string(108) "Vers­lo cent­rai Lie­tu­vos ne­kil­no­ja­mo­jo turto plėt­ros aso­cia­ci­jos kon­kur­se ... "

Codepad示例

strip_tags()文档中有这样的描述:因为strip_tags()并不会实际验证HTML,所以部分或损坏的标签可能会导致删除比预期更多的文本/数据。

另外第二个参数是用于$allowable_tags的。


1

1
从 PHP 7.4.0 开始,strip_tags() 函数还可以接受一个包含允许标签的数组作为参数。
然后这样:
<?php

$html = '<div id="my-div"><p>text<strong><a href="#link"></a></strong></p></div>';

echo strip_tags($html, ['p', 'a']); //accept p and a tags

返回这个:

<p>text<a href="#link"></a></p>

请注意,只有被禁止的标签已经被移除。

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