【问题标题】:Retrieve value of a textarea with PHP使用 PHP 检索文本区域的值
【发布时间】:2011-01-19 10:18:31
【问题描述】:

有人可能知道如何使用 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!”从文本区域。那可能吗?再次打扰你们,抱歉,你们提供了如此有用的建议:]。

【问题讨论】:

  • 我建议使用正则表达式,但我怀疑我会因此而被骂 =)

标签: php file-get-contents


【解决方案1】:

请不要打扰我们,这是一个很好的问题,我很乐意回答。您可以使用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!'

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

【讨论】:

  • 我没有得到任何输出,可能是文本框的内容吗? (它们不是空白的)
【解决方案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 的值。

【讨论】:

  • 这么多好答案!非常感谢大家,你们的帮助不只是帮助。
  • 当我使用这个代码时,我得到一个错误:警告:DOMDocument::loadHTMLFile() [domdocument.loadhtmlfile]: Unexpected end tag : input 有解决办法吗?
  • 这听起来像是您尝试解析的 HTML 已损坏,这是一场常见的噩梦。您应该使用 Tatu 的正则表达式解决方案。
  • 或将Tidy 加入其中。用于 Dom 的 PCRE 通常不是最好的解决方案。
猜你喜欢
  • 2020-05-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
相关资源
最近更新 更多