使用PHP检索textarea的值

时间:2010-02-21 20:49:41

标签: php file-get-contents

是否有人知道如何使用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!”来自textarea。那可能吗?很抱歉打扰你们,再次,你们给出了一些有用的建议:]。

2 个答案:

答案 0 :(得分: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!'

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

答案 1 :(得分:2)

我建议使用PHP 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的值。