【问题标题】:Grabbing hidden inputs as a string (Using PHP Simple HTML DOM Parser)将隐藏的输入作为字符串抓取(使用 PHP Simple HTML DOM Parser)
【发布时间】:2011-09-23 16:25:30
【问题描述】:

所以我有一个包含 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 个隐藏输入(完整字符串)。非常感谢您的帮助,因为尝试完成这项工作让我有点发疯。

【问题讨论】:

    标签: php html parsing string-parsing


    【解决方案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);
    
    ?>
    

    【讨论】:

    • DOMDocument::saveHTML() 期望正好有 0 个参数将此作为警告
    【解决方案2】:

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

    如果 SimpleDOM 不允许这种选择器,您可以简单地遍历 -&gt;find('input') 结果并通过自己比较属性找出隐藏的结果。

    【讨论】:

    • 使用 (thanks) 获得完整的隐藏输入: // Get the input hiddens foreach($html->find('input[type=hidden]') as $element) echo $element;现在我只是想知道单独存储这些并将它们传递到另一个页面的最佳方式是什么。有没有办法将这些存储在一个变量中,每个输入都隐藏?
    • 将它们存储在一个数组中:$hidden = array('meta_required' =&gt; xxx, 'meta_forward_vars =&gt; yyy); 并在构建新表单时使用它来重建隐藏的输入。或者只是将 find() 结果保存在某处并将其用作您的源而不是新数组。
    • 嗯,考虑到我想将此信息传递到已经预先设置样式的表单的另一个页面,最好将此信息存储在某种会话中吗?不确定如何在会话中单独存储元素。
    • 会话数组是一个数组,就像其他数组一样,恰好在请求之间持久化。 $_SESSION['hidden values'] = array(...).
    • 在您的指导下终于可以使用了,感谢您的帮助,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2012-08-12
    • 2012-04-08
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多