support base href
[phinde.git] / src / phinde / LinkExtractor / Html.php
index 0d6f3d8aa1159bd9053801464033abf063fad09b..7b987e3280fa0b298c7c0f9b2ef774eb15cc5a87 100644 (file)
@@ -2,6 +2,7 @@
 namespace phinde\LinkExtractor;
 
 use phinde\LinkInfo;
+use phinde\Helper;
 
 class Html
 {
@@ -21,10 +22,17 @@ class Html
 
         $dx = new \DOMXPath($doc);
 
-        $meta = $dx->evaluate('/html/head/meta[@name="robots" and @value]')
+        $xbase = $dx->evaluate('/html/head/base[@href]')->item(0);
+        if ($xbase) {
+            $base = $base->resolve(
+                $xbase->attributes->getNamedItem('href')->textContent
+            );
+        }
+
+        $meta = $dx->evaluate('/html/head/meta[@name="robots" and @content]')
             ->item(0);
         if ($meta) {
-            $robots = $meta->attributes->getNamedItem('value')->textContent;
+            $robots = $meta->attributes->getNamedItem('content')->textContent;
             foreach (explode(',', $robots) as $value) {
                 if (trim($value) == 'nofollow') {
                     //we shall not follow the links
@@ -36,10 +44,10 @@ class Html
         $links = $dx->evaluate('//a');
         //FIXME: link rel, img, video
 
-        $alreadySeen = array();
+        $alreadySeen = array($url => true);
 
         foreach ($links as $link) {
-            $linkTitle = $link->textContent;
+            $linkTitle = Helper::sanitizeTitle($link->textContent);
             $href = '';
             foreach ($link->attributes as $attribute) {
                 if ($attribute->name == 'href') {