1

順序付けられていないリストがいくつかあります。リスト項目は URL です。各リスト項目から URL とリンク テキストを抽出してデータベースに挿入するにはどうすればよいですか?

<ul id="1">
    <li><a href="someplace.com">Text</a></li>
    <li><a href="someplace.com">Text</a></li>
    <li><a href="someplace.com">Text</a></li>
</ul>

<ul id="2">
    <li><a href="someplace.com">Text</a></li>
    <li><a href="someplace.com">Text</a></li>
    <li><a href="someplace.com">Text</a></li>
</ul>

<ul id="3">
    <li><a href="someplace.com">Text</a></li>
    <li><a href="someplace.com">Text</a></li>
    <li><a href="someplace.com">Text</a></li>
</ul>

正規表現は避けるべきだと知っています。私はすでに PDO をセットアップしています。ul id 番号は、mysql テーブルの categoryID に入ります。

意味があると思われる唯一のことは、URL とテキストを取得するために内部に別のループを含む while ループのようなものであり、その後に id をインクリメントすることです。どうやって始めればいいのかわからない。URL とテキストを配列に入れる必要がありますか?

4

4 に答える 4

3

HTML が string に格納されていると仮定すると、PHP DOMを使用して、正規表現に頼らずにさまざまなリスト項目を抽出$contentできます。

$dom = DOMDocument::loadHTML($content);
$lists = $dom->getElementsByTagName('ul');
foreach($lists as $list) {
  $id = $list->getAttribute('id');
  $links = $list->getElementsByTagName('a');
  foreach ($links as $link) {
    $href = $link->getAttribute('href');
    $text = $link->nodeValue;
    // insert $id, $text and $href into the data here 
  }
}
于 2013-05-30T13:37:30.283 に答える
1

正規表現をうまく使用できます:

preg_match_all('/<a href=\"(.*?)\"[.*]?>(.*?)<\/a>/i', $string, $matches);

$insert = array();

foreach($matches as $val)
{
    /* DONT FORGET TO ESCAPE YOUR DATA IF NEEDED */
    $url = $val[0];
    $name = $val[1];

    $insert[] = 'INSERT INTO tableName (url, name) VALUES ("' . $url . '", "' . $name . '")';
}

print_r($insert);
于 2013-05-30T13:35:46.840 に答える
0

jQueryブラウザに送信された後に値を取得しようとしている場合に、目的の値を抽出するバージョンは次のとおりです。

var data=$("ul");
var values=new Array();
$.each(data,function(i){
values[i]=$(this).attr("id");
$.each($(this).find("li"),function(j){
values[i+"-"+j+"link"]=$(this).find("a").attr("href")
values[i+"-"+j+"text"]=$(this).find("a").text();
});
});
console.log(values)

ajax呼び出しを介してこの配列をphpファイルに送信します

それが理にかなっていることを願っています

于 2013-05-30T13:56:28.707 に答える
0

試してみることをお勧めしますSimpleHTMLDom。これは、xml のようなドキュメントを処理するために使用する PHP ライブラリです。

次のように簡単に行くことができます:

require_once("/path/to/simplehtmldom/library");
$parsed_data = array();
//we next need to create a dom object --
//case 1: let me assume the HTML is in a string
$dom_object = str_get_html($html_string);
//case 2: it's at a particular url
$dom_object = file_get_html("http://www.site-with-the-content.com");
//now we have our object
$links = $dom_object->find("ul li a");
//finds all the <a> tags on the page inside <ul>, you could filter it 
//using class or ids like with jQuery if you like
foreach($links as $link){
    $parsed_data[] = array(
        "link"=>$link->href,
        "text"=>$link->innertext
    );
}
//You can now go through your array of parsed content and insert into your DB    

この助けを願っています:)

SimpleHTMLDom Sourceforge プロジェクト

于 2013-05-30T13:39:19.910 に答える