繁体   English   中英

在PHP中从HTML提取数据的最简单方法是什么?

[英]What's the easiest way to extract a piece of data from HTML in PHP?

我正在处理大部分无效HTML的一小部分,并且需要提取一小部分数据。 考虑到大多数“标记”都是无效的,因此我认为将所有内容都加载到DOM中并不是一个好选择。 而且,对于这种简单情况,似乎有很多开销。

这是我拥有的标记的示例:

(a bunch of invalid markup here with unclosed tags, etc.)
<TD><span>Something (random text here)</span></TD>
(a bunch more invalid markup here with more unclosed tags.)

<TD><span>Something (random text here)</span></TD>部分不会在文档中的任何位置重复其本身,因此我相信使用简单的正则表达式即可解决问题。

但是,我对正则表达式感到恐惧。

我应该使用正则表达式吗? 有没有更简单的方法可以做到这一点? 如果可能的话,我只想提取Something之后的文本(此处为随机文本)。

提前致谢!

编辑-

HTML的确切示例(我已经省略了之前的内容,这是供应商使用的无效标记。我认为,该示例与该示例无关):

<div class="FormTable">
        <TABLE>
        <TR>
                <TD colspan="2">In order to proceed with login operation please 
                answer on the security question below</TD>
        </TR>
        <TR>
                <TD colspan="2">&nbsp;</TD>
        </TR>
        <TR>
                <TD><label class="FormLabel">Security Question</label></TD>
                <TD><span>What is your city of birth?</span></TD>
        </TR>
        <TR>
                <TD><label class="FormLabel">Answer</label></TD>
                <TD><INPUT name="securityAnswer" class="input" type="password" value=""></TD>
        </TR>
        </TABLE>
</div>  

如果您确定打开和关闭span标签在同一行上。

$ cat test.php
<?php
  $subject = "(a bunch of invalid markup here with unclosed tags, etc.)
              <TD><span>Something (random text here)</span></TD>
              (a bunch more invalid markup here with more unclosed tags.)";

  $pattern = '/<span>.*<\/span>/';

  preg_match($pattern, $subject, $matches);
  print_r($matches);

?>


$ php -f test.php
Array
(
    [0] => <span>Something (random text here)</span>
)

如果您不确定span标记在同一行上,则可以将html视为文本文件,并将grep用作span标记。

$ grep '[</]span>' yourfile.html

您可能会通读此答案以及它引用的其他两个答案 实际上,一次使用无效的 HTML代码比使用完整的解析器更容易让运气好一点。

在您的情况下,使用DOM分析器并不是最佳选择。 我坚信您需要SAX解析器,它仅提取文档的一部分并将适当的事件发送给处理程序。 此方法可以轻松解析损坏的文档。

范例: http : //pear.php.net/package/XML_HTMLSax3 http://www.php.net/manual/en/example.xml-structure.php

尝试使用DOMDOcument::loadHTML()方法,该方法应该消除与HTML相关的任何验证错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM