Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP清理HTML以创建干净的字符串_Php_Html_Strip Tags - Fatal编程技术网

使用PHP清理HTML以创建干净的字符串

使用PHP清理HTML以创建干净的字符串,php,html,strip-tags,Php,Html,Strip Tags,我有一堆HTML数据,我正在使用PHP将它们写入PDF文件。在PDF中,我希望所有的HTML都被剥离和清理。例如: <ul> <li>First list item</li> <li>Second list item which is quite a bit longer</li> <li>List item with apostrophe 's 's</li> </ul>

我有一堆HTML数据,我正在使用PHP将它们写入PDF文件。在PDF中,我希望所有的HTML都被剥离和清理。例如:

<ul>
    <li>First list item</li>
    <li>Second list item which is quite a bit longer</li>
    <li>List item with apostrophe 's 's</li>
</ul>
但是,如果我简单地使用
strip\u tags()
,我会得到如下结果:

   First list item&#8232;

   Second list item which is quite a bit
longer&#8232;

   List item with apostrophe &rsquo;s &rsquo;s
还要注意输出的缩进

关于如何正确地将HTML清理成漂亮、干净的字符串,而不使用混乱的空格和奇数字符,有什么提示吗


谢谢:)

使用库清理html。但在您的例子中,我会使用类从html获取数据。

字符似乎是html实体。尝试:

html_entity_decode( strip_tags( $my_html_code ) );

您可以使用preg_replace对strip_标记的结果进行解码或删除它们:

$text = strip_tags($html_text);
$content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$text );
要删除行开头的空白,请使用:

要保留撇号,请改为使用此选项:

$text = strip_tags($html_text);
$text = str_replace("&rsquo;","'", $text); 
$content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$text );

我怀疑单凭
strip\u tags()
就能对你的实体进行编码。你确定你没有在某个地方错过对
htmlentities
的调用吗?缩进正是我所期望的,PHP正在剥离标记,但不是它们周围的额外文本。你的意思是我应该或不应该在某个地方使用htmlentities()?现在我不是。HTML数据直接来自数据库。
htmlentities
负责这些事情
(例如),所以如果你不想要它们,就不应该使用它。那太好了!差不多了。唯一的问题是撇号现在已经完全消失了。这可以通过一个小的调整来解决吗?我在你的回答中使用了preg_replace。很好,这对我遇到的问题起到了治疗作用。
$content = join("\n", array_map("ltrim", explode("\n", $content )));
$text = strip_tags($html_text);
$text = str_replace("&rsquo;","'", $text); 
$content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$text );