function callback_relative_url(&$matches) { return hotpot_convert_relative_url($this->get_baseurl(), $this->reference, $matches[1], $matches[6], $matches[7], false); }
function hotpot_convert_relative_urls($str, $baseurl, $filename) { $tagopen = '(?:(<)|(<)|(&#x003C;))'; // left angle bracket $tagclose = '(?(2)>|(?(3)>|(?(4)&#x003E;)))'; // right angle bracket (to match left angle bracket) $space = '\\s+'; // at least one space $anychar = '(?:[^>]*?)'; // any character $quoteopen = '("|"|&quot;)'; // open quote $quoteclose = '\\5'; // close quote (to match open quote) $replace = "hotpot_convert_relative_url('" . $baseurl . "', '" . $filename . "', '\\1', '\\6', '\\7')"; $tags = array('script' => 'src', 'link' => 'href', 'a' => 'href', 'img' => 'src', 'param' => 'value', 'object' => 'data', 'embed' => 'src'); foreach ($tags as $tag => $attribute) { if ($tag == 'param') { $url = '\\S+?\\.\\S+?'; // must include a filename and have no spaces } else { $url = '.*?'; } $search = "/({$tagopen}{$tag}{$space}{$anychar}{$attribute}={$quoteopen})({$url})({$quoteclose}{$anychar}{$tagclose})/is"; if (preg_match_all($search, $str, $matches, PREG_OFFSET_CAPTURE)) { $i_max = count($matches[0]) - 1; for ($i = $i_max; $i >= 0; $i--) { $match = $matches[0][$i][0]; $start = $matches[0][$i][1]; $replace = hotpot_convert_relative_url($baseurl, $filename, $matches[1][$i][0], $matches[6][$i][0], $matches[7][$i][0], false); $str = substr_replace($str, $replace, $start, strlen($match)); } } } return $str; }