|
|
|
@ -2093,7 +2093,68 @@ class rcube_base_replacer
|
|
|
|
|
|
|
|
|
|
public function callback($matches)
|
|
|
|
|
{
|
|
|
|
|
return $matches[1] . '="' . make_absolute_url($matches[3], $this->base_url) . '"';
|
|
|
|
|
return $matches[1] . '="' . self::absolute_url($matches[3], $this->base_url) . '"';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function replace($body)
|
|
|
|
|
{
|
|
|
|
|
return preg_replace_callback(array(
|
|
|
|
|
'/(src|background|href)=(["\']?)([^"\'\s]+)(\2|\s|>)/Ui',
|
|
|
|
|
'/(url\s*\()(["\']?)([^"\'\)\s]+)(\2)\)/Ui',
|
|
|
|
|
),
|
|
|
|
|
array($this, 'callback'), $body);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Convert paths like ../xxx to an absolute path using a base url
|
|
|
|
|
*
|
|
|
|
|
* @param string $path Relative path
|
|
|
|
|
* @param string $base_url Base URL
|
|
|
|
|
*
|
|
|
|
|
* @return string Absolute URL
|
|
|
|
|
*/
|
|
|
|
|
public static function absolute_url($path, $base_url)
|
|
|
|
|
{
|
|
|
|
|
$host_url = $base_url;
|
|
|
|
|
$abs_path = $path;
|
|
|
|
|
|
|
|
|
|
// check if path is an absolute URL
|
|
|
|
|
if (preg_match('/^[fhtps]+:\/\//', $path)) {
|
|
|
|
|
return $path;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// check if path is a content-id scheme
|
|
|
|
|
if (strpos($path, 'cid:') === 0) {
|
|
|
|
|
return $path;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// cut base_url to the last directory
|
|
|
|
|
if (strrpos($base_url, '/') > 7) {
|
|
|
|
|
$host_url = substr($base_url, 0, strpos($base_url, '/', 7));
|
|
|
|
|
$base_url = substr($base_url, 0, strrpos($base_url, '/'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// $path is absolute
|
|
|
|
|
if ($path[0] == '/') {
|
|
|
|
|
$abs_path = $host_url.$path;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
// strip './' because its the same as ''
|
|
|
|
|
$path = preg_replace('/^\.\//', '', $path);
|
|
|
|
|
|
|
|
|
|
if (preg_match_all('/\.\.\//', $path, $matches, PREG_SET_ORDER)) {
|
|
|
|
|
foreach ($matches as $a_match) {
|
|
|
|
|
if (strrpos($base_url, '/')) {
|
|
|
|
|
$base_url = substr($base_url, 0, strrpos($base_url, '/'));
|
|
|
|
|
}
|
|
|
|
|
$path = substr($path, 3);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$abs_path = $base_url.'/'.$path;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $abs_path;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|