0

我在这里得到了一些很大的帮助,我非常接近解决我的问题,我可以品尝到它。但我似乎被困住了。

我需要从本地网络服务器抓取一个简单的表单,并且只返回与用户本地电子邮件匹配的行(即 onemyndseye@localhost)。simplehtmldom 可以轻松提取正确的表单元素:

foreach($html->find('form[action*="delete"]') as $form) echo $form;

回报:

<form action="/delete" method="post">
    <input type="checkbox" id="D1" name="D1" /><a href="http://www.linux.com/rss/feeds.php">
        http://www.linux.com/rss/feeds.php
    </a> [email: 
        onemyndseye@localhost (Default)
    ]<br />         
    <input type="checkbox" id="D2" name="D2" /><a href="http://www.ubuntu.com/rss.xml">
        http://www.ubuntu.com/rss.xml
    </a> [email: 
        onemyndseye@localhost (Default)
    ]<br />         
<input type="submit" name="delete_submit" value="Delete Selected" /></form>

但是,我无法进行下一步。返回包含“onemyndseye@localhost”的行并将其删除,以便仅返回以下内容:

<input type="checkbox" id="D1" name="D1" /><a href="http://www.linux.com/rss/feeds.php">http://www.linux.com/rss/feeds.php</a> <br />
<input type="checkbox" id="D2" name="D2" /><a href="http://www.ubuntu.com/rss.xml">http://www.ubuntu.com/rss.xml</a> <br />

感谢这个网站的优秀用户,我已经走到了这一步,甚至可以只返回链接,但我无法获得其余的......重要的是,完整的<input>标签完全如上所示返回,因为 id 和 name 值将需要稍后在发布数据中传递回原始表单。

提前致谢!

***** EDIT ******

多亏了 Yacoby,问题已接近解决。最后一个小障碍是 str_ireplace 留下了一些垃圾。也许删除</a><br />...之间的所有文本会更容易?

在 Yacoby 的添加之后,输出如下:

<form action="/delete" method="post">
    <input type="checkbox" id="D1" name="D1" /><a href="http://www.linux.com/rss/feeds.php">
        http://www.linux.com/rss/feeds.php
    </a> [email: 
         (Default)
    ]<br />         
    <input type="checkbox" id="D2" name="D2" /><a href="http://www.ubuntu.com/rss.xml">
        http://www.ubuntu.com/rss.xml
    </a> [email: 
         (Default)
    ]<br />         
    <input type="checkbox" id="D3" name="D3" /><a href="http://mythbuntu.org/rss.xml">
        http://mythbuntu.org/rss.xml
    </a> [email: 

    ]<br />         
<input type="submit" name="delete_submit" value="Delete Selected" /></form>

注意 [email: (Default)] 和 [email: ] 已被留下。最后还需要删除表单操作并提交行,但我认为我可以从之前的建议中收集到那部分。

***** SOLVED ****

问题解决了:

$html = file_get_html('http://localhost:9000/');
foreach($html->find('form[action*="delete"]') as $form)
  if ( stripos($form->innertext, 'onemyndseye@localhost') !== false ){
      $form = preg_replace('!</a>.*?<br />!s', '</a><br />', $form);
      echo $form;
}

谢谢您的帮助!

4

1 回答 1

0

也许像

if ( stripos($form->innertext, 'onemyndseye@localhost') !== false ){
    $form->innertext = str_ireplace('onemyndseye@localhost', '', $form->innertext);
    echo $form;
}

这不适用于像这样的html

<b>onemyndseye</b>@localhost

因为很容易找到删除标签的文本是否与使用的字符串匹配,plaintext但替换起来要困难得多。

于 2010-05-01T15:48:06.510 回答