【问题标题】:preg_replace replace incomplete tagspreg_replace 替换不完整的标签
【发布时间】:2013-07-23 18:04:56
【问题描述】:

我正在尝试使用 file_get_contents 读取 html 页面。我处理完数据后,有一些不完整的标签例如:

</p><p> test test test test</p>

在这种情况下没有&lt;p&gt; 可以打开&lt;/p&gt;

<font color="#333333">abc</font><div><p>go go go go </p>

在这种情况下,没有&lt;/div&gt; 可以关闭&lt;div&gt;

因此我想使用 preg_replace 删除所有这些不完整的标签,在我的示例中,应该删除额外的 &lt;/p&gt;&lt;div&gt;。我怎样才能做到这一点?这些标签可以是任何有效的 html5 标签。

【问题讨论】:

标签: regex preg-replace


【解决方案1】:

首先,您需要了解 XHTML 中的“格式良好的标记文档”是什么。 使用格式良好的标记,如果它们是备用的未配对标签,则不能保证选择为“开始结束对(打开关闭)”的标签将是正确的两个。

其次,您需要构建一个循环,以便在每次迭代时从标签类型的数组存储库中调用每个标签。数组中的标签应该是“文字”。 在测试标签是否存在之前,应在循环中获取并设置每个标签“长度”int。

当找到标签对的匹配(打开关闭)时,preg match 将部分放入匹配的副本数组中,位置和长度,然后从部分的部分中获取匹配的长度及其起始位置预匹配返回结果数组(在开发脚本时使用数组的调试打印输出)。

在每个匹配的开闭对中,您需要执行相同操作的子循环来检查内部标签。

简介: 构建这样一个系统,作为一个定制的脚本,使用 XML 格式良好的文档解析器和具有任何有效效率的调试器。如果它具有有效的效率,它将是一个 IDE 的标记调试器。 祝你好运。

【讨论】:

    【解决方案2】:

    您应该调查使用 PHP Tidy 扩展 (http://php.net/manual/en/book.tidy.php)。您可以使用 Tidy 根据您尝试验证的任何 DOCTYPE 来清理格式错误的 HTML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多