我在这里得到了很多帮助,我非常接近解决我的问题,我可以品尝它。但我似乎陷入困境。
我需要从本地网络服务器中抓取一个简单的表单,并且只返回与用户本地电子邮件匹配的行(即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值需要稍后在post数据中传递回原始表单。
提前致谢!
***** 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 :(默认)]和[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;
}
感谢您的帮助!
答案 0 :(得分:0)
也许像
if ( stripos($form->innertext, 'onemyndseye@localhost') !== false ){
$form->innertext = str_ireplace('onemyndseye@localhost', '', $form->innertext);
echo $form;
}
这不适用于像
这样的html<b>onemyndseye</b>@localhost
因为很容易找到带有标签的文本是否与使用plaintext
的字符串匹配,但更换起来要困难得多。