diff --git a/system/src/Grav/Common/Twig/Extension/GravExtension.php b/system/src/Grav/Common/Twig/Extension/GravExtension.php index d46b28f08..62621a2a1 100644 --- a/system/src/Grav/Common/Twig/Extension/GravExtension.php +++ b/system/src/Grav/Common/Twig/Extension/GravExtension.php @@ -557,7 +557,7 @@ class GravExtension extends AbstractExtension implements GlobalsInterface public function replaceLastFilter($str, $search, $replace) { if (is_string($str) && ($pos = mb_strrpos($str, $search)) !== false) { - $str = substr_replace($str, $replace, $pos, mb_strlen($search)); + $str = mb_substr($str, 0, $pos) . $replace . mb_substr($str, $pos + mb_strlen($search)); } return $str; diff --git a/system/src/Grav/Common/Utils.php b/system/src/Grav/Common/Utils.php index 30889e299..6a4e89fbe 100644 --- a/system/src/Grav/Common/Utils.php +++ b/system/src/Grav/Common/Utils.php @@ -78,19 +78,12 @@ abstract class Utils $grav = Grav::instance(); - // is this a page? - /** @var Pages $pages */ - $pages = $grav['pages']; - $page = $pages->find($input, true); - if ($page && $page->routable()) { - return $page->url($domain); - } - /** @var Uri $uri */ $uri = $grav['uri']; $resource = false; if (static::contains((string)$input, '://')) { + // Url contains a scheme (https:// , user:// etc). /** @var UniformResourceLocator $locator */ $locator = $grav['locator']; @@ -142,6 +135,16 @@ abstract class Utils $resource = $locator->findResource($input, false); } } else { + // Just a path. + /** @var Pages $pages */ + $pages = $grav['pages']; + + // Is this a page? + $page = $pages->find($input, true); + if ($page && $page->routable()) { + return $page->url($domain); + } + $root = preg_quote($uri->rootUrl(), '#'); $pattern = '#(' . $root . '$|' . $root . '/)#'; if (!empty($root) && preg_match($pattern, $input, $matches)) {