处理字符串以获得下载url


processing a string to get a download url

我想从https://www.java.com/de/download/manual.jsp对于脱机安装程序,将x86和x64作为字符串。我该怎么做?

我可以用file_get_contents(); 获得页面

$page = file_get_contents('https://www.java.com/de/download/manual.jsp');

我需要哪些函数来处理字符串?

我需要这部分源代码:

<a title="Download der Java-Software für Windows Offline" href="http://javadl.sun.com/webapps/download/AutoDL?BundleId=113217">
Windows Offline</a>

<a title="Download der Java-Software für Windows (64-Bit)" href="http://javadl.sun.com/webapps/download/AutoDL?BundleId=113219">
Windows Offline (64-Bit)</a>

问题是url可能在版本发布后发生更改。

Preg_match将发挥作用。

preg_match("'<a title='"Download der Java-Software für Windows Offline'" href='"(.*?)'">(.*?)</a>'si", $source, $match);

对于64位版本,情况类似。

preg_match("'<a title='"Download der Java-Software für Windows '(64-Bit')'" href='"(.*?)'">(.*?)</a>'si", $source, $match);

match[1]在这两种情况下都会提供下载链接。这些模式依赖于"title"属性中的文本,所以如果这一点没有改变,下载链接也没有改变,那就不会有问题。

$page = file_get_contents('https://www.java.com/de/download/manual.jsp');
preg_match("'<a title='"Download der Java-Software für Windows Offline'" href='"(.*?)'">(.*?)</a>'si", $page, $match);
preg_match("'<a title='"Download der Java-Software für Windows '(64-Bit')'" href='"(.*?)'">(.*?)</a>'si", $page, $match1);
$d_x86 = $match[0];
$d_x64 = $match1[0];
preg_match("'http*://'w+.'w+.'w+/'w+/'w+/'w+.'w+='d+'", $d_x86, $match3);
preg_match("'http*://'w+.'w+.'w+/'w+/'w+/'w+.'w+='d+'", $d_x64, $match4);
$d_x86_url = $match3[0];
$d_x64_url = $match4[0];
echo "<a href='"$d_x86_url'">Download aktuellste JRE für Windows x86</a><br>";
echo "<a href='"$d_x64_url'">Download aktuellste JRE für Windows x64</a>";

我建议您使用漂亮的PHP DOM扩展来访问HTML文档中所有必需的节点和属性:

<?php
$dom = new DOMDocument();
$dom->loadHTMLFile('https://www.java.com/de/download/manual.jsp');//load and parse document
$links = $dom->getElementsByTagName('a');//get all 'a' tags in document
foreach ($links as $link) {//iterate on all 'a' tags
    if($link->getAttribute('title') == 'Download der Java-Software für Windows Offline')
    {
        echo $link->nodeValue . '<br/>';//or do whatever you want
    }
}
?>