我在这里得到了一些很大的帮助,我非常接近解决我的问题,我可以品尝到它。但我似乎被困住了。
我需要从本地网络服务器抓取一个简单的表单,并且只返回与用户本地电子邮件匹配的行(即 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;
}
谢谢您的帮助!