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

时间:2013-05-08 12:19:14

标签: php html regex 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行?怎么能只回显这条线?

1 个答案:

答案 0 :(得分:0)

你需要类似于Python Beautiful Soup的东西,但是对于PHP,比如this。无论如何,它可能是在引擎盖下使用正则表达式,所以它可能不会比你的解决方案更快。当然,它更清洁。

编辑:我不鼓励这样做,但是如果你知道你的脚本将总是文件的第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个元素。