# HG changeset patch # User Matti Hamalainen # Date 1703056675 -7200 # Node ID 596196f2b0c51147a0a6444215d28c23d8848298 # Parent 7da360685721279c6c3d40d3f1e75e253d235c33 Improve relative URL translation in header text blobs. diff -r 7da360685721 -r 596196f2b0c5 mgallery.php --- a/mgallery.php Wed Sep 06 13:04:41 2023 +0300 +++ b/mgallery.php Wed Dec 20 09:17:55 2023 +0200 @@ -209,6 +209,30 @@ } +function mgTranslateRelativeURLs($text, $path, $base) +{ + // Translate / transform relative href="" URLs in given text + // XXX TODO: Perhaps use regexp backreferences instead of loop + $quoteList = ["'", "\""]; + foreach ($quoteList as $quote) + { + $text = preg_replace_callback( + "@href\s*=\s*".$quote."([^\"]+)".$quote."@i", + function ($matches) use($path, $base) + { + $mstmp = $matches[1]; + if (preg_match("@^[a-z]+://@i", $mstmp) === 0) + { + if ($mstmp[0] != "/") + $mstmp = $base."/".$path."/".str_replace("//", "/", $mstmp); + } + return "href=\"".$mstmp."\""; + }, $text); + } + return $text; +} + + function mgGetImageTitleStr(&$data, $filename) { return @@ -722,26 +746,12 @@ if ($ctrlFlags & MGF_BREADCRUMBS) mgPrintBreadCrumbs($galData); - if (isset($galData["header"]) && strlen($gheader = mgGetTrans($galData["header"])) > 0) + if (isset($galData["header"]) && strlen($headerText = mgGetTrans($galData["header"])) > 0) { // Translate relative URLs in header, if needed - $baseURL = mgGetSetting("image_url"); - - $headerText = preg_replace_callback( - "@href\s*=\s*\"([^\"]+)\"@i", - function ($matches) use($galPath, $baseURL) - { - $mstmp = $matches[1]; - if (preg_match("@^[a-z]+://@i", $mstmp) === 0) - { - if ($mstmp[0] != "/") - $mstmp = $baseURL."/".$galPath."/".str_replace("//", "/", $mstmp); - } - return "href=\"".$mstmp."\""; - }, - $gheader); - - echo "
".$headerText."
\n"; + echo "
". + mgTranslateRelativeURLs($headerText, $galPath, mgGetSetting("image_url")). + "
\n"; } echo mgGetPageInfoHeaderEnd();