将隐藏的输入作为字符串抓取(使用PHP Simple HTML DOM Parser)

时间:2011-06-27 16:54:22

标签: php html parsing string-parsing

所以我有一个有4个输入,2个文本,2个隐藏的表单。我从名称中抓取了两个文本输入值,它们是(get_me_two,get_me_three),我还抓住了表单操作(get_me.php)。我现在要做的是抓住2个隐藏的输入,但不是值。我想自己抓住输入。

E.G:这是我的表格:

<form action="get_me.php" method="post">
    <input type="text" name="get_me_two">
    <input type="text" name="get_me_three">
    <input type="hidden" name="meta_required" value="from">
    <input type="hidden" name="meta_forward_vars" value="0">
</form>

我想从这里抓取的是两个隐藏的输入,不是值,完整的字符串

我不确定如何使用这些:PHP Simple HTML DOM Parser,如果有人知道一种方法会很棒,如果没有,如果有一种替代方案也会很棒。一旦我抓住这些,我计划将2个输入值传递给另一个带有隐藏字符串的页面,当然还有表单操作。

此外,如果有人对此感兴趣,那么我的完整代码包括简单的html dom功能。

<?php

include("simple_html_dom.php");

// Create DOM from URL or file
$html = file_get_html('form_show.php');
$html->load('
<form action="get_me.php" method="post">
<input type="text" name="get_me_two">
<input type="text" name="get_me_three">
<input type="hidden" name="meta_required" value="from">
<input type="hidden" name="meta_forward_vars" value="0">
</form>');

// Get the form action
foreach($html->find('form') as $element) 
   echo $element->action . '<br>';

// Get the input name       
foreach($html->find('input') as $element) 
   echo $element->name . '<br>';
?>

因此,最终结果将获取3个值,然后是2个隐藏输入(完整字符串)。帮助将非常感激,因为它让我有点疯狂试图完成这件事。

2 个答案:

答案 0 :(得分:4)

我不使用SimpleDom(我总是全力以赴并使用DOMDocument),但你不能做->find('input[@type=hidden]')之类的事情吗?

如果SimpleDOM不允许那种选择器,你可以简单地遍历->find('input')结果并通过自己比较属性来挑选隐藏的结果。

答案 1 :(得分:1)

如果您使用DomDocument,则可以执行以下操作:

<?php
    $hidden_inputs = array();
    $dom = new DOMDocument('1.0');
    @$dom->loadHTMLFile('form_show.php');

    // 1. get all inputs
    $nodes = $dom->getElementsByTagName('input');

    // 2. loop through elements
    foreach($nodes as $node) {
        if($node->hasAttributes()) {
            foreach($node->attributes as $attribute) {
                if($attribute->nodeName == 'type' && $attribute->nodeValue == 'hidden') {
                    $hidden_inputs[] = $node;
                }
            }
        }
    } unset($node);

    // 3. loop through hidden inputs and print HTML
    foreach($hidden_inputs as $node) {
        echo "<pre>" . htmlspecialchars($dom->saveHTML($node)) . "</pre>";
    } unset($node);

?>