Я думаю, substr
на самом деле должно быть strpos
?
Я сомневаюсь, что этот код когда-либо работал. Поскольку вы не проверяете личность (===
), условие всегда выполняется, поэтому предваряется www.
. Это должно работать, однако:
if (FALSE === strpos($url, '://www.'))
$url = str_replace('://', '://www.', $url);
Нет необходимости заменять дорогостоящие регулярные выражения в этом случае, поэтому вы должны использовать str_replace
.
ОБНОВЛЕНИЕ: Вопрос был отредактирован. Я предлагаю следующее:
// Strip "invalid" characters
$url = preg_replace('/[^a-z0-9\.\-]/i', '', $url);
// Split URL by scheme, host, path (and possibly more)
$parts = parse_url($domain);
if (empty($parts['scheme']))
$parts['scheme'] = 'http';
if (!strcmp('example.com', $parts['host']))
$parts['host'] = 'www.example.com';
// Reconstruct URL
$url = sprintf('%s://%s%s', $parts['scheme'], $parts['host'], $parts['path']);
Имейте в виду, что parse_url
может вернуть намного больше. Вам нужно будет восстановить соответственно.