Fixes #3909: Html::to() should not prefix base URL to URLs that already contain scheme

This commit is contained in:
Qiang Xue
2014-06-17 15:41:01 -04:00
parent ca0a1f0593
commit 24257e76c8
3 changed files with 17 additions and 4 deletions

View File

@ -192,15 +192,19 @@ class BaseUrl
if ($url === '') {
$url = Yii::$app->getRequest()->getUrl();
} elseif ($url[0] !== '/' && $url[0] !== '#' && $url[0] !== '.' && strpos($url, '://') === false) {
$url = Yii::$app->getRequest()->getBaseUrl() . '/' . $url;
} else {
$hasScheme = ($pos = strpos($url, ':')) > 0 && ctype_alpha(substr($url, 0, $pos));
$char = $url[0];
if ($char !== '/' && $char !== '#' && $char !== '.' && !$hasScheme) {
$url = Yii::$app->getRequest()->getBaseUrl() . '/' . $url;
}
}
if ($scheme) {
if (strpos($url, '://') === false) {
if (empty($hasScheme)) {
$url = Yii::$app->getRequest()->getHostInfo() . '/' . ltrim($url, '/');
}
if (is_string($scheme) && ($pos = strpos($url, '://')) !== false) {
if (is_string($scheme) && ($pos = strpos($url, ':')) !== false) {
$url = $scheme . substr($url, $pos);
}
}