1

質問が述べているように; PHP ページ内のすべての URL が相対 URL である場合、それを検出する方法はありますか。もちろん、PHP ページに含まれる URL がさまざまな動作で表示される可能性があることを考慮すると、次のようになります。

<link rel="stylesheet" href="/lib/css/hanv2/ie.css" />
<img src="/image.jpg">
<div style="background-image: url(/lib/data/emotion-header-v2/int-algemeen08.jpg)"></div>

だから私は相対URLを取得する必要がcss linkありますjs link.image linkswf link

私はこれにAgilityPackを使用しています。リンクを検出し、それらが相対的かどうかを確認するために使用した C# コード スニペストを次に示します。

      // to extract all a href tags
 private List<string> ExtractAllAHrefTags(HtmlAgilityPack.HtmlDocument htmlSnippet)
    {
        List<string> hrefTags = new List<string>();

        foreach (HtmlNode link in htmlSnippet.DocumentNode.SelectNodes("//link[@href]"))
        {
            HtmlAttribute att = link.Attributes["href"];
            hrefTags.Add(att.Value);
        }

        return hrefTags;
    }


    // to extract all img src tags
    private List<string> ExtractAllImgTags(HtmlAgilityPack.HtmlDocument htmlSnippet)
    {
        List<string> hrefTags = new List<string>();

        foreach (HtmlNode link in htmlSnippet.DocumentNode.SelectNodes("//img[@src]"))
        {
            HtmlAttribute att = link.Attributes["src"];
            hrefTags.Add(att.Value);
        }

        return hrefTags;
    }




       //to check whether path is relative       
            foreach (string s in AllHrefTags)
            {                  
                if (!s.StartsWith("http://") || !s.StartsWith("https://"))
                {
                    // path is not relative
                }
            }

AgilityPackなどを使用して、特定のHTMLページからすべての相対パスを簡単に取得するための良い方法またはより正確な方法があるかどうか疑問に思っています

4

1 に答える 1

2

この xpath 式を使用して、href または src 値である html ページから相対 URL を抽出できます。

htmlSnippet.DocumentNode.SelectNodes("(//@src|//@href)[not(starts-with(.,'http://'))][not(starts-with(.,'https://'))]");

現在のページの特定の場所にジャンプするために使用される # で始まるリンクをフィルタリングすることができます (例:< a href="#tips">):

    htmlSnippet.DocumentNode.SelectNodes("(//@src|//@href)[not(starts-with(.,'http://'))][not(starts-with(.,'https://'))][not(starts-with(.,'#'))]");
于 2013-01-21T15:01:05.763 に答える