的file_get_contents();不再使用html表?

时间:2013-08-10 18:59:38

标签: php file-get-contents

当我需要获取外部html内容时,我使用的代码总是对我有用但是,从昨天开始,代码不再有效。

这是代码设置

ini_set('display_errors', 1);
$url ='https://www3.bcb.gov.br/ptax_internet/consultarTodasAsMoedas.do?method=consultaTodasMoedas';
$site = file_get_contents($url);

此链接是巴西中央银行的货币转换器,每日更新(营业日)。

我需要从此页面获取USD和EUR值,当我尝试获取Table中的值时它返回空,但是当我在div中获取值时,一切都按预期工作。

如果我转到源代码页面,我可以看到:

<tr class="fundoPadraoBClaro2">
     <td align="CENTER">220</td>
     <td align="CENTER">A</td>
     <td align="CENTER">USD</td>
     <td align="right">2,2743</td>
     <td align="right">2,2748</td>
     <td align="right">1,0000</td>
     <td align="right">1,0000</td>
</tr>

要获得我使用的美元价值:

$data1 = explode('<td align="CENTER">USD</td><td align="right">', $site);
$data2 = explode('</td>',$data1[1]);
$usd = $data2[0];

但是不行,这会返回空值。

但是,如果我使用相同的代码来获取DIV内的所有内容,那么一切正常。

源代码:

<div align="center">
    <strong>Cotações de todas as moedas no dia 09/08/2013 às 13:00 (horário de Brasília), conforme fechamento PTAX.</strong>
</div>

PHP代码:

$data1 = explode('todas as moedas no dia', $site);
$data2 = explode('conforme fechamento PTAX.',$data1[1]);
$result = $data2[0];

我得到了我的预期 - “09/08/2013à13:00(horáriodeBrasília)”

谁能告诉我我错过了什么?

2 个答案:

答案 0 :(得分:3)

问题是您没有考虑<td align="CENTER">USD</td><td align="right">之间的空白。

这是一个完美的情况,你可以使用正则表达式而不是字符串操作:

<强>代码

$matches = array();
if (preg_match("/USD<\\/td>\\s+<td[^>]*>(?<usd_value>[0-9,.-]*)<\\/td>/i", $site, $matches))
    echo $matches["usd_value"];

正则表达式搜索USD后跟</td>,然后是空格,然后是<td...>标记。 <td...>和下一个</td>之间的所有内容都会被捕获到名为usd_value

的组中

<强>输出

2,2743

答案 1 :(得分:1)

我发现了一个错误:     $data2 = explode('</td>',$data[1]);

应该是:

$data2 = explode('</td>',$data1[1]);

相关问题