PHP file_get_contents()和查询字符串

时间:2011-05-24 21:02:04

标签: php mysql parsing file curl

我有一个问题 - 一个不解析的解析器。这是行不通的!它没有给任何东西!好吧,我想要回来 - 并将结果存储在mysql数据库中。

<?PHP
// Original PHP code by Chirp Internet: http://www.chirp.com.au
// Please acknowledge use of this code by including this header.

$url = "http://www.edi.admin.ch/esv/00475/00698/index.html?lang=de";

//$input = @file_get_contents($url) or die("Could not access file: $url");

$input = file_get_contents($url) or die("Could not access file: $url"); 

$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER))
{
    foreach($matches as $match) 
    {
        // $match[2] = all the data i want to collect...
        // $match[3] = text that i need to collect - see a detail-page
    }
}
?>

它有点过头了:它没有回馈任何结果。我是否必须将file_get_contents()与查询字符串一起使用?

3 个答案:

答案 0 :(得分:4)

在这里工作正常:

$url = "http://www.edi.admin.ch/esv/00475/00698/index.html?lang=de";

$doc = new DOMDocument();
// Supress warnings for screwy HTML
@$doc->loadHTMLFile($url);

// Use DOM functionality to get all links
$link_list = $doc->getElementsByTagName('a');

$links = array(); 
foreach($link_list as $link) {
  if($link->getAttribute('href')) {
    // and put their href attributes and
    // text content in an array
    $link_info['href'] = $link->getAttribute('href');
    $link_info['text'] = $link->nodeValue;
    $links[] = $link_info;
  }
}

print_r($links);

输出:

Array
(
    [0] => Array
        (
            [href] => #webNavigationDiv
            [text] => Direkt zur Navigation [Alt + 1]
        )

    [1] => Array
        (
            [href] => #contentStart
            [text] => Direkt zum Inhalt [Alt + 2] 
        )

    [2] => Array
        (
            [href] => #keywords_fast
            [text] => Direkt zur Suche [Alt + 5]
        )

答案 1 :(得分:3)

你正在做一些你不应该做的事情 - 用正则表达式解析HTML。不要这样做!

使用DOM解析函数。 PHP的DOMDocument类非常易于使用,并且比正则表达式更易读(和稳定):

$dom = new DOMDocument;
$dom->loadHTML($yourHTML);

$links = $dom->getElementsByTagName('a');

$hrefs = array();
foreach ($links as $link) {
    $hrefs[] = $link->getAttribute('href');
}

如果您想这样做,获取其他数据(例如文本内容或其他属性名称)非常简单。

答案 2 :(得分:2)

如果启用了适当的fopen包装,则只能使用类似fopen的函数。

请参阅:http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

虽然我会说“正则表达式对html不好”,如果这只是一个小脚本,谁在乎呢?话虽这么说,DOMDocument和朋友很容易使用。

约什