0

私は約10〜15のリンクがあり、すべてのリンクが私の管理下にあり、有名人のようないくつかの単語で終わるというページがあります。その単語で終わるすべてのリンクをフィルタリングしたいので、これを書きました

    $regex='|<a.*?href="(.*_celebrity)"|';


    preg_match_all($regex,$result21,$parts);
$links=$parts[0];
foreach($links as $link){
{
    echo $link."<br>";
    mysql_query ("INSERT INTO tablea(linkssas) VALUES ('$link')");
    }

それは仕事をし、_celebrityで終わるすべてのリンクをフィルタリングしますが、出力はデータベースに入力されていません。すべてのリンクは1つの行に入力されており、アンカーテキストの形式であることがわかりませんが、データベースにプレーンリンクが必要です私はforeachを使用しているので、すべてのリンクは別々の行に入力する必要がありますが、すべての行は単一の行に入力され、次のようなアンカーの形式で入力されます。http://xyz.com/edje/jjeieied_celebrity">A</a>

しかし、私はデータベース内のリンクのみが必要です

4

2 に答える 2

3

私はあなたにDOMDocumentツアーを提供する義務があると感じました:

$d = new DOMDocument();
$d->loadHTML($result21);

$suffix = "_celebrity"; $suffix_len = strlen($suffix);

foreach ($d->getElementsByTagName('a') as $link) {
    $href = $link->getAttribute('href');
    if ($href && substr($href, -$suffix_len) === $suffix) {
        // do your insert here
    }
}

または、:XPathの代わりに使用するgetElementsByTagName

$xp = new DOMXPath($d);

foreach($xp->query('//a[substring(@href, string-length(@href) - 9) = "_celebrity"]') as $node) {
    echo $node->getAttribute('href');
}

そして、これが私たちのチャットルームからのメッセージです:

mysql_*新しいコードで関数を使用しないでください。それらはもはや維持されておらず、公式に非推奨になっています。赤いボックスがか?代わりにプリペアドステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事はどちらを決定するのに役立ちます。PDOを選択した場合は、ここに優れたチュートリアルがあります。

于 2013-02-07T14:53:45.670 に答える
0

おそらく、$parts[0] の代わりに $parts[1] をループしたいでしょう。

http://php.net/manual/en/function.preg-match-all.php

于 2013-02-07T14:50:38.857 に答える