diff --git a/module/Core/src/Util/UrlValidator.php b/module/Core/src/Util/UrlValidator.php index 6bd8d76f..2e2965b1 100644 --- a/module/Core/src/Util/UrlValidator.php +++ b/module/Core/src/Util/UrlValidator.php @@ -13,6 +13,7 @@ use Shlinkio\Shlink\Core\Exception\InvalidUrlException; use Shlinkio\Shlink\Core\Options\UrlShortenerOptions; use Throwable; +use function html_entity_decode; use function preg_match; use function str_contains; use function str_starts_with; @@ -71,7 +72,7 @@ class UrlValidator implements UrlValidatorInterface, RequestMethodInterface $collectedBody .= $body->read(1024); } preg_match(TITLE_TAG_VALUE, $collectedBody, $matches); - return isset($matches[1]) ? trim($matches[1]) : null; + return isset($matches[1]) ? $this->normalizeTitle($matches[1]) : null; } /** @@ -101,4 +102,9 @@ class UrlValidator implements UrlValidatorInterface, RequestMethodInterface return null; } } + + private function normalizeTitle(string $title): string + { + return html_entity_decode(trim($title)); + } } diff --git a/module/Core/test/Util/UrlValidatorTest.php b/module/Core/test/Util/UrlValidatorTest.php index 7e1f9a1b..8aba6598 100644 --- a/module/Core/test/Util/UrlValidatorTest.php +++ b/module/Core/test/Util/UrlValidatorTest.php @@ -128,7 +128,7 @@ class UrlValidatorTest extends TestCase $result = $this->urlValidator->validateUrlWithTitle('http://foobar.com/12345/hello?foo=bar', true); - self::assertEquals('Resolved title', $result); + self::assertEquals('Resolved "title"', $result); $request->shouldHaveBeenCalledOnce(); } @@ -162,7 +162,7 @@ class UrlValidatorTest extends TestCase private function respWithTitle(): Response { - $body = $this->createStreamWithContent('