【问题标题】:PHP - Parsing pure text in an HTML stringPHP - 解析 HTML 字符串中的纯文本
【发布时间】:2011-12-17 01:41:17
【问题描述】:

我有一个 HTML 字符串,我想对其纯文本内容进行一些文本格式设置。我的意思是,我想提取任何文本,而不是包含在标签大括号中。但是...我计划使用 DOMDocument,但我不知道我要查找的标签,也不知道它们的 ID。

例如,我可以拥有那个字符串

<p><i>some tex<span class="aclass">t</span> in the document.</i>Whoooa <img src="anImage.png" /></p>

我想在重新注入页面中使用原始标签格式化的整个文本之前格式化“document.Whoooa”字符串中的一些文本。例如在点之后放一个空格并删除结束空格。

我该怎么做?

【问题讨论】:

    标签: php html parsing tags domdocument


    【解决方案1】:

    如果可能的话,使用 jQuery 在客户端更容易做到这一点,它是专门为简单的 dom 操作而设计的。通常,您将需要使用 preg_match 和/或 xml 解析器。我认为有一些 dom 解析器,但我不记得 php 中是否包含任何解析器。

    【讨论】:

    • 尝试使用 preg_match 处理 html 是一种挫败感。
    【解决方案2】:

    我已经开始创建一个名为TextRange 的类,它为文本节点提供了一个简单的接口,作为某个DOMDocument 部分的单个字符串表示形式。

    您需要找出需要更改字符串的位置,然后TextRange 类可以在必要时拆分节点。我在以下两个问题中对此进行了冗长的解释:

    第一个还包含一个非常原始的TextRangeTrimmer 类,它可以删除此类TextRange 开头和结尾的空格。

    由于您只修改文本节点值,因此始终保留原始标签。根据您的使用情况,您以后可能需要自己清理未使用的(空)标签。

    它基于 DOMDocument 工作,并接受父 DOMElement(范围将是所有 textnode 子节点)、xpath 查询结果 (DOMNodeList) 或只是一个 textnode 元素数组。

    【讨论】:

      【解决方案3】:

      使用strip_tags

      $str = '<p><i>some tex<span class="aclass">t</span> in the document.</i>Whoooa <img src="anImage.png" /></p>';
      echo strip_tags( $str);
      

      这将输出:

      string(33) "some text in the document.Whoooa " 
      

      那么,对于剩下的问题:

      // Put a space after the point
      $str = preg_replace( '/\.([^ ])/', '. $1', $str); 
      // and deleting the ending space.
      $str = rtrim( $str, ' ');
      

      Demo

      【讨论】:

      • 他要求一种方法来编辑文本内容而不破坏标签。
      猜你喜欢
      • 2013-08-15
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 2019-03-11
      • 2016-06-12
      相关资源
      最近更新 更多