使用PHP获取文本区域的值

3

请问有人知道如何使用PHP获取HTML文档中特定元素的值吗?目前我的做法是使用file_get_contents函数从另一个网站拉取HTML代码,在该网站上有一个


我建议使用正则表达式,但我怀疑我会因此而遭受喊叫 =) - CJD
2个回答

7

不用为打扰我们感到抱歉,这是一个好问题,我很高兴回答。您可以使用PHP Simple HTML DOM解析器来获取您需要的内容:

$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!'

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

我没有得到任何输出,可能是文本框的内容吗?(它们不是空白的) - Baehr

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 的文本区域的值。


这么多好的答案!非常感谢大家,你们帮了我很多。 - Baehr
当我使用这段代码时,出现了一个错误:警告:DOMDocument :: loadHTMLFile()[domdocument.loadhtmlfile]:意外的结束标记:input有解决方法吗? - Baehr
这听起来像是你试图解析的HTML代码出了问题,这是一个常见的噩梦。你应该采用Tatu的正则表达式解决方案。 - Juan
或者将Tidy加入其中。对于Dom的东西,PCRE通常不是最好的解决方案。 - ficuscr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接