解析外部站点并获取变量

时间:2014-07-26 16:08:28

标签: php

我有一个指向我想要获取文本的网页的链接。例如,页面包含以下行:

<span property="v:latitude" content="-31.941283"></span><span property="v:longitude" content="115.85838"></span>

我需要从那里得到-31.941283和115.85838。在PHP中使用它的最佳和最方便的方法是什么?

到目前为止,我有这样的事情:

public function _getLocationFromSite($pSiteHTML){
    if ( !$pSiteHTML ){
        return FALSE;
    }

    if (!preg_match('/(<span property="v:latitude" content="[^"]+">)/', $pSiteHTML, $matchelat)) {
        return FALSE;
    }

    if (!preg_match('/(<span property="v:longitude" content="[^"]+">)/', $pSiteHTML, $matchelon)) {
        return FALSE; 
    }

    $location['lat'] = (float)( $matchelat);
    $location['lon'] = (float)($matchelon);

    return $location;
}

它不起作用......任何想法?

1 个答案:

答案 0 :(得分:2)

正则表达式是正确的,但你的捕获是错误的。

function _getLocationFromSite($pSiteHTML){
    if ( !$pSiteHTML ){
        return FALSE;
    }

    if (!preg_match('/<span property="v:latitude" content="([^"]+)">/', $pSiteHTML, $matchelat)) {
        return FALSE;
    }

    if (!preg_match('/<span property="v:longitude" content="([^"]+)">/', $pSiteHTML, $matchelon)) {
        return FALSE;
    }

    $location['lat'] = (float)($matchelat[1]);
    $location['lon'] = (float)($matchelon[1]);

    return $location;
}

还有改进的余地,即可以进一步减少代码。这是一个例子:

<?php
function _getLocationFromSite($html) {
    preg_match_all('/<span property="v:(.*?)" content="(.*?)">/', $html, $matches);
    return array_combine($matches[1], $matches[2]);
}
var_dump(_getLocationFromSite(null));
var_dump(_getLocationFromSite(''));
var_dump(_getLocationFromSite('<span property="v:latitude" content="-31.941283"></span><span property="v:longitude" content="115.85838"></span>'));
?>

结果如下:

array(0) {
}
array(0) {
}
array(2) {
  ["latitude"]=>
  string(10) "-31.941283"
  ["longitude"]=>
  string(9) "115.85838"
}