3

有人可能知道如何使用 PHP 获取 HTML 文档中特定元素的值吗?我现在正在做的是使用file_get_contents从另一个网站提取 HTML 代码,并且在该网站上有一个 textarea:

<textarea id="body" name="body" rows="12" cols="75" tabindex="1">Hello World!</textarea>

我想要做的是让我的脚本执行file_get_contents并拉出“Hello World!” 从文本区域。那可能吗?对不起,再次打扰你们,你们提供了如此有用的建议:]。

4

2 回答 2

7

不要打扰我们,这是一个很好的问题,我很乐意回答。您可以使用PHP Simple HTML DOM Parser来获得所需的内容:

$html     = file_get_html('http://www.domain.com/');
$textarea = $html->find('textarea[id=body]'); 
$contents = $textarea->innertext;

echo $contents; // Outputs 'Hello World!'

如果你想使用file_get_contents(),你可以这样做:

$raw_html = file_get_contents('http://www.domain.com/');
$html     = str_get_html($raw_html);
...

虽然我看不到任何需要,file_get_contents()因为如果您在某处需要它,您可以使用该outertext方法获取原始的完整 HTML:

$html     = file_get_html('http://www.domain.com/');
$raw_html = $html->outertext;

只是为了好玩,您也可以使用单行正则表达式来执行此操作:

preg_match('~<textarea id="body".*?>(.*?)</textarea>~', file_get_contents('http://www.domain.com/'), $matches);
echo $matches[1][0]; // Outputs 'Hello World!'

我强烈建议您不要这样做,因为您更容易受到可能破坏此正则表达式的代码更改的影响。

于 2010-02-21T20:57:24.617 回答
2

我建议使用 PHPs DOM & DOMXPath类。

$dom = DOMDocument::loadHTMLFile( $url );
$xpath = new DOMXPath( $dom );
$nodes = $xpath->query('//textarea[id=body]' )

$result = array();
for( $nodes as $node ) {
    $result[] = $node->textContent;
}

$result将包含每个带有 id body 的 textarea 的值。

于 2010-02-21T21:03:40.283 回答