From ecd051905f0c8aa97590eb453d553dc678125a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20Can=C3=A9vet?= Date: Sun, 8 Nov 2015 23:06:21 +0100 Subject: Fix issue 366, Problem when shaaring a link in Reader View of Firefox. --- application/Url.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'application/Url.php') diff --git a/application/Url.php b/application/Url.php index a4ac2e73..e7c3a4cc 100644 --- a/application/Url.php +++ b/application/Url.php @@ -125,6 +125,19 @@ class Url } } + + private function removeFirefoxAboutReader($input){ + $output_array = []; + preg_match("%^about://reader\?url=(.*)%", $input, $output_array); + if(!empty($output_array)){ + $extractedUrl = preg_replace("%^about://reader\?url=(.*)%", "$1", $input); + $url = urldecode($extractedUrl); + }else{ + $url = $input; + } + return $url; + } + /** * Returns a string representation of this URL */ @@ -187,7 +200,8 @@ class Url { $this->cleanupQuery(); $this->cleanupFragment(); - return $this->toString(); + $url = $this->toString(); + return $this->removeFirefoxAboutReader($url); } /** -- cgit v1.2.3 From c9da01e749e5319d0c0f400cde06e71c0e7312d5 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Thu, 24 Mar 2016 19:01:40 +0100 Subject: Refactor and rebase #380: Firefox reader view links Fixes #366 Closes #380 --- application/Url.php | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) (limited to 'application/Url.php') diff --git a/application/Url.php b/application/Url.php index e7c3a4cc..af38c4d9 100644 --- a/application/Url.php +++ b/application/Url.php @@ -118,24 +118,41 @@ class Url */ public function __construct($url) { - $this->parts = parse_url(trim($url)); + $url = self::cleanupUnparsedUrl(trim($url)); + $this->parts = parse_url($url); if (!empty($url) && empty($this->parts['scheme'])) { $this->parts['scheme'] = 'http'; } } + /** + * Clean up URL before it's parsed. + * ie. handle urlencode, url prefixes, etc. + * + * @param string $url URL to clean. + * + * @return string cleaned URL. + */ + protected static function cleanupUnparsedUrl($url) + { + return self::removeFirefoxAboutReader($url); + } - private function removeFirefoxAboutReader($input){ - $output_array = []; - preg_match("%^about://reader\?url=(.*)%", $input, $output_array); - if(!empty($output_array)){ - $extractedUrl = preg_replace("%^about://reader\?url=(.*)%", "$1", $input); - $url = urldecode($extractedUrl); - }else{ - $url = $input; - } - return $url; + /** + * Remove Firefox Reader prefix if it's present. + * + * @param string $input url + * + * @return string cleaned url + */ + protected static function removeFirefoxAboutReader($input) + { + $firefoxPrefix = 'about://reader?url='; + if (startsWith($input, $firefoxPrefix)) { + return urldecode(ltrim($input, $firefoxPrefix)); + } + return $input; } /** @@ -200,8 +217,7 @@ class Url { $this->cleanupQuery(); $this->cleanupFragment(); - $url = $this->toString(); - return $this->removeFirefoxAboutReader($url); + return $this->toString(); } /** -- cgit v1.2.3 From ce7b0b6480aa854ee6893f5c889277b0e3b13efc Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Wed, 6 Apr 2016 22:00:52 +0200 Subject: Fixes #531 - Title retrieving is failing with multiple use case see https://github.com/shaarli/Shaarli/issues/531 for details --- application/Url.php | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'application/Url.php') diff --git a/application/Url.php b/application/Url.php index af38c4d9..61a30a78 100644 --- a/application/Url.php +++ b/application/Url.php @@ -62,7 +62,21 @@ function add_trailing_slash($url) { return $url . (!endsWith($url, '/') ? '/' : ''); } +/** + * Converts an URL with an IDN host to a ASCII one. + * + * @param string $url Input URL. + * + * @return string converted URL. + */ +function url_with_idn_to_ascii($url) +{ + $parts = parse_url($url); + $parts['host'] = idn_to_ascii($parts['host']); + $httpUrl = new \http\Url($parts); + return $httpUrl->toString(); +} /** * URL representation and cleanup utilities * @@ -220,6 +234,22 @@ class Url return $this->toString(); } + /** + * Converts an URL with an International Domain Name host to a ASCII one. + * This requires PHP-intl. If it's not available, just returns this->cleanup(). + * + * @return string converted cleaned up URL. + */ + public function indToAscii() + { + $out = $this->cleanup(); + if (! function_exists('idn_to_ascii') || ! isset($this->parts['host'])) { + return $out; + } + $asciiHost = idn_to_ascii($this->parts['host']); + return str_replace($this->parts['host'], $asciiHost, $out); + } + /** * Get URL scheme. * @@ -232,6 +262,18 @@ class Url return $this->parts['scheme']; } + /** + * Get URL host. + * + * @return string the URL host or false if none is provided. + */ + public function getHost() { + if (empty($this->parts['host'])) { + return false; + } + return $this->parts['host']; + } + /** * Test if the Url is an HTTP one. * -- cgit v1.2.3 From caa69b585381cc1c22df3dbb9c943855b8f13a70 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Thu, 5 May 2016 13:28:43 +0200 Subject: typo --- application/Url.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'application/Url.php') diff --git a/application/Url.php b/application/Url.php index 61a30a78..77447c8d 100644 --- a/application/Url.php +++ b/application/Url.php @@ -240,7 +240,7 @@ class Url * * @return string converted cleaned up URL. */ - public function indToAscii() + public function idnToAscii() { $out = $this->cleanup(); if (! function_exists('idn_to_ascii') || ! isset($this->parts['host'])) { -- cgit v1.2.3