Pārlūkot izejas kodu

[DomCrawler] Fixed URIs being incorrectly generated

When the path is not ending with a slash and the form/link has only ?get=params then the last bit of the path was incorrectly stripped
Jordi Boggiano 14 gadi atpakaļ
vecāks
revīzija
1719bfb871

+ 0 - 4
src/Symfony/Component/DomCrawler/Crawler.php

@@ -567,10 +567,6 @@ class Crawler extends \SplObjectStorage
 
         $path = parse_url($uri, PHP_URL_PATH);
 
-        if ('/' !== substr($path, -1)) {
-            $path = substr($path, 0, strrpos($path, '/') + 1);
-        }
-
         return array(preg_replace('#^(.*?//[^/]+)\/.*$#', '$1', $uri), $path);
     }
 

+ 6 - 1
src/Symfony/Component/DomCrawler/Form.php

@@ -176,8 +176,13 @@ class Form implements \ArrayAccess
             $uri .= $sep.$queryString;
         }
 
+        $path = $this->path;
+        if ('?' !== substr($uri, 0, 1) && '/' !== substr($path, -1)) {
+            $path = substr($path, 0, strrpos($path, '/') + 1);
+        }
+
         if ($uri && '/' !== $uri[0] && !$urlHaveScheme) {
-            $uri = $this->path.$uri;
+            $uri = $path.$uri;
         }
 
         if ($absolute && null !== $this->host && !$urlHaveScheme) {

+ 6 - 1
src/Symfony/Component/DomCrawler/Link.php

@@ -67,8 +67,13 @@ class Link
         $uri = $this->node->getAttribute('href');
         $urlHaveScheme = 'http' === substr($uri, 0, 4);
 
+        $path = $this->path;
+        if ('?' !== substr($uri, 0, 1) && '/' !== substr($path, -1)) {
+            $path = substr($path, 0, strrpos($path, '/') + 1);
+        }
+
         if ($uri && '/' !== $uri[0] && !$urlHaveScheme) {
-            $uri = $this->path.$uri;
+            $uri = $path.$uri;
         }
 
         if ($absolute && null !== $this->host && !$urlHaveScheme) {