使用curl防止HTML的某些部分在从远程页面检索的代码中显示


prevent some parts of html from showing in code retrieved from remote page using curl

我正在使用curl从远程页面检索源代码,然后使用echo $html在我的页面中返回它,但这会返回整个远程页面。我想做的是防止某些部分

不会在我的页面中被回声(远程页面中的广告和其他部分)远程页面代码几乎就像

<IFRAME FRAMEBORDER=0 MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=NO WIDTH=728 HEIGHT=90 SRC="http://creative.xtendmedia.com/proxy/matomymediaproxy.html?ad_type=ad&ad_size=728x90&section=2650714"></IFRAME>
<script type="text/javascript" src="http://www.youradexchange.com/script/java.php?option=rotateur&rotateur=83132"></script>
<script language="JavaScript"> var zflag_nid="1723"; var zflag_cid="18"; var zflag_sid="0"; var zflag_width="1"; var zflag_height="1"; var zflag_sz="15"; </script>
<script language="JavaScript" src="http://c1.zxxds.net/jsc/c1/fo.js"></script>

目前使用preg_match_all('#(<iframe.*myspecificword.*/iframe>)#i', $html, $matches); var_dump($matches);

,但这是无效的,因为具体的单词每次都不同。

是否有其他更好的方法提供的代码的一部分,我想做只显示始终是第59行?怎么只能回这行?

您需要类似于Python Beautiful Soup的东西,但是对于PHP,像这样。无论如何,它可能在底层使用正则表达式,所以它可能不会比您的解决方案快。当然,它更干净。

编辑:我不鼓励这样做,但是如果你知道你的脚本将总是文件的第59行,并且只有一行,那么逐行读取它,丢弃前58行,像这样:
$stream = fopen('http://php.net/manual/en/function.fopen.php', 'r');
if (!$stream) {
    // Report error
}
for ($i = 0; $i < 58; $i++) {
    fgets($stream);
}
// Here is line 59
$myline = fgets($stream);
echo $myline;

您可能必须用:

展开可识别的行终止符列表
ini_set('auto_detect_line_endings',true);

相反,如果页面是字符串,则使用explode()在行结束符处将其断开,然后选择返回数组的第59个元素。