使用PHP Simple HTML DOM解析器获取隐藏输入字段的字符串

7

我有一个表单,其中有4个输入框,2个是文本输入框,2个是隐藏输入框。我已经从名称中获取了两个文本输入框的值(get_me_two, get_me_three),并且我还获取了表单操作(get_me.php)。现在我想获取另外两个隐藏输入框,但不需要其值,只需要获取这两个输入框本身。

例如:这是我的表单:

<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解析器来获取它们,如果有人知道一个方法那就太好了,如果没有,如果有其他替代方案也很好。一旦我获取了这些,我计划将这两个输入框的值和隐藏字符串传递到另一个页面,当然还包括表单操作。

此外,如果有人感兴趣,这是我的完整代码,其中包括简单的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个回答

4

我不使用SimpleDom(我总是采用DOMDocument),但你能否做类似于->find('input[@type=hidden]')这样的操作呢?

如果SimpleDOM不允许这种选择器,你可以通过循环遍历->find('input')结果,并通过比较属性来挑选出隐藏的元素。


使用以下代码获取所有的隐藏输入框(感谢):// 获取隐藏输入框
foreach($html->find('input[type=hidden]') as $element) echo $element;现在,我正在思考将它们以各自独立的方式存储并传递给另一个页面的最佳方法。是否有一种方法可以将这些隐藏输入框存储在一个变量中,每个输入框都是独立的?
- user676853
将它们存储在数组中:$hidden = array('meta_required' => xxx, 'meta_forward_vars => yyy);,并在构建新表单时使用该数组来重建隐藏的输入项。或者只需将 find() 结果保存在某个地方,并将其用作源,而不是一个新数组。 - Marc B
嗯,考虑到我想将这些信息传递给已经预先设置好样式的另一个页面,最好是将这些信息存储在某种会话中吗?不太确定如何将这些元素单独存储在会话中。 - user676853
session数组就像其他数组一样,只是在请求之间得以保留。 $_SESSION ['hidden values'] = array(...) - Marc B
在您的指导下,最终成功解决了问题,感谢您的帮助和支持。 - user676853

2
如果您使用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);

?>

1
DOMDocument::saveHTML() 函数不需要任何参数,您收到了这个警告。 - Vinothkumar Arputharaj

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