それを確認してから、対処するケースですでに行ったように、ケースにも対処する必要があります。
このようなタスクが非常に簡単になるため、通常は URL 処理用のNetUrl2
クラスをお勧めします。
ただし、次の変更を行うだけで、カバーしていない他の部分を正規化するだけでなく、スキームを適切にチェックすることもできます。あなたが求めたを追加する部分を強調表示したwww.
ので、不要になった場合は簡単に削除できます。
function addHttp($url) {
$parts = parse_url($url);
$modif = function ($key, $prefix, $default = '') use (&$parts)
{
$parts[$key] = isset($parts[$key]) ? $prefix . $parts[$key] : $default;
};
$modif('scheme', '', 'http');
$parts['scheme'] = strtolower($parts['scheme']);
if (isset($parts['path']) && $parts['path'][0] !== '/')
{
$pathIsInPath = strstr($parts['path'], '/', TRUE);
$parts['host'] = $pathIsInPath ? : (isset($parts['host']) ? $parts['host'] : '') . $parts['path'];
$parts['path'] = $pathIsInPath ? substr($parts['path'], strlen($pathIsInPath)) : '';
}
if (isset($parts['port']) && $parts['scheme'] === getservbyport($parts['port'], 'tcp')) {
unset($parts['port']);
}
$modif('path', '', '/');
$parts['path'] === '/' && $parts['path'] = '';
// add www. if wanted
if (substr($parts['host'], 0, 4) !== 'www.') {
$modif('host', 'www.');
}
return sprintf('%s://%s%s%s%s%s', $parts['scheme'], $parts['host'], $modif('port', ':')
, $parts['path'], $modif('query', '?'), $modif('fragment', '#'));
}