【问题标题】:simple_html_dom plaintext result has no spacessimple_html_dom 纯文本结果没有空格
【发布时间】:2014-10-27 15:03:52
【问题描述】:

我有以下html:

<div><p>Launched:</p> <p>2010</p><p>Categories:</p><p>Software</p><p>Description:</p><p>Established</p><p>Website:</p></div>

如果我加载它并使用纯文本来获取文本:

$str = '<div><p>Launched:</p><p>2010</p><p>Categories:</p><p>Software</p><p>Description:</p><p>Established</p><p>Website:</p></div>'; $html = str_get_html($str); echo $html->plaintext;

结果不同p标签之间没有空格:

发布时间:2010 类别:软件描述:已建立网站:

如果我在结束和开始 p 标记之间添加一个空格,它会正确输出。

这是正确的行为吗?

有没有办法让解析器在明文输出中考虑 p 标签?

【问题讨论】:

  • 是的,这是正确的行为。
  • 如果我想要一个可读的输出,我应该怎么做?
  • 然后改用-&gt;innertext
  • @bansi: 如果我在标签之间添加空格,这不应该有任何区别,它会在输出中的单词之间添加空格
  • &gt; &lt;替换每个&gt;&lt;怎么样

标签: php html-parsing simple-html-dom


【解决方案1】:

标签 p 之间必须有空格,或者你可以这样做:

$result = "";
foreach($html->find('p') as $val){
    $result .= $val->plaintext." " ;
}

【讨论】:

  • 这只是一个例子,我实际上是在解析整个页面,我只想从中获取文本,在大多数情况下纯文本工作得很好,但有时,如果 HTML 有连续的标签(不仅仅是 p 标签),输出带有附加的单词。有办法解决吗?
【解决方案2】:

你可以这样去掉标签

    $content = file_get_contents($url);
    $rawContent = strip_tags($content);
    $html = str_get_html($content);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2014-03-15
    • 1970-01-01
    相关资源
    最近更新 更多