【问题标题】:how to parse an input value thats hidden如何解析隐藏的输入值
【发布时间】:2011-07-18 14:06:36
【问题描述】:

我在这里或谷歌上找不到与解析隐藏的输入值相关的任何内容。例如这里的这段代码。我正在尝试解析 40 个字符的密钥。

<input type="hidden" name="key" value="c126b4f134cb2c1184c1585fdfa4d1b0013a12f4"> 

我试过了,但它永远不会返回任何隐藏的值。

libxml_use_internal_errors(TRUE);
    $dom = new DOMDocument;
    $dom->loadHTMLFile('http://www6.cbox.ws/box/?boxid=524970&boxtag=7xpsk7&sec=form');
    libxml_clear_errors();

    $xp = new DOMXpath($dom);
    $nodes = $xp->query('//input/@value');
    foreach($nodes as $node)
        {
          echo( $node->textContent . "<br><br>" );
        }

var_dump($node);

更新代码

libxml_use_internal_errors(TRUE);
$dom = new DOMDocument;
$dom->loadHTMLFile('http://www6.cbox.ws/box/?boxid=524970&boxtag=7xpsk7&sec=form');
libxml_clear_errors();

$xp = new DOMXpath($dom);
$nodes = $xp->query('//input[type="hidden"]');
$val = $nodes->getAttribute('value');

var_dump($val);

返回此错误引用行“$val = $nodes->getAttribute('value');”

Fatal error: Call to undefined method DOMNodeList::getAttribute()

【问题讨论】:

  • XPath 返回一个 NODEList 作为其结果,而不是一个节点。请改用$nodes[0]-&gt;getAttribute()

标签: php parsing dom


【解决方案1】:
$nodes = $xp->query('//input[type="hidden"]');
foreach ($nodes as $node) {
    $val = $node->getAttribute('value');
}

评论跟进:

如果您查看包含在代码示例中的页面的源代码,您会发现只有一个隐藏的表单字段,并且它有一个空值:

<input type="hidden" name="key" value="">

当然,XPath 将返回一个 NULL - 这就是存储在该 value 属性中的内容:什么都没有。

【讨论】:

  • @jennifer:该页面中唯一隐藏的字段是&lt;input type="hidden" name="key" value=""&gt;。所以也许这就是你没有结果的原因。此外,您问题中的-&gt;textContent 在任何一种情况下都是空的(?)
  • @mario 是的,for each 循环不是必需的,因为就像你说的那样,该代码只有一个实例,但是我如何从 value 中获取该字符串?
  • @jennifer:我赌 15 美分你没有像 Marc 的例子所说的那样使用 -&gt;getAttribute("value")
  • @mario 我更新了我的帖子以反映我当前的脚本,我得到“致命错误:调用未定义的方法 DOMNodeList::getAttribute()”
  • 你可能在做$nodes-&gt;getAttribute()(注意节点上的S)。请改用$node。 $nodes 是 XPath 查询返回的 NODEList。 $node 是该列表中的单个节点。
【解决方案2】:

使用您的更新代码,固定版本将是:

<?php

libxml_use_internal_errors(TRUE);
$dom = new DOMDocument;
// This link is now dead...
$dom->loadHTMLFile('http://www6.cbox.ws/box/?boxid=524970&boxtag=7xpsk7&sec=form');
libxml_clear_errors();

$val = array(); // Must be set before foreach loop

$xp = new DOMXpath($dom);
$nodes = $xp->query('//input[type="hidden"]');
foreach ($nodes as $node) {
    $val[] = $node->getAttribute('value');
}

var_dump($val);

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2016-04-02
    • 2013-11-17
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多