|
|
|
| Доброго времени суток. Сразу к делу :)
Поьзователь заполняет к свойствах профиля поле: URL сайта.
Все польльзователи записывают url-ы разными способами.
Например сайт может быть записан так:
site.ru
www.site.ru
http://site.ru
|
Я делаю редирект при помощи стандартных средств переадресации:
первый способ при помощи java-скрипта, вот фрагмент:
window.location.href = document.getElementById('redir').href;
|
И вот второй способ, если у пользователя отключен java-скрипт:
<meta http-equiv="refresh" content="1; url=<?php echo "$row"; ?>" />
|
Суть в том, что если пользователь заполнил поле урл без http:// , то редирект не произойдет.
Проверку при заполнении я не хочу делать.
Теперь самая основная суть:)))))
Помогите составить регулярное выражение, которое будет проверять если ли в переменной URL - "http://", если нет, то дописываем в начало переменной http:// и редиректимся.
Если есть "http://", оставляем как есть и делаем редирект.
Всего две строчки регэкспов. Заранее благодарен! | |
|
|
|
|
|
|
|
для: Night_Charter
(28.05.2007 в 18:49)
| | Вполне можно обойтись без регекспов (привел и РГ для примера)
<?php
//$url = 'http://site.ru';
$url = 'site.ru';
//$url = preg_replace("#^(http://)?(.+)$#i", "http://\\2", $url);
if (substr($url, 0, 7) !== 'http://')
$url = 'http://'.$url;
echo $url;
?>
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(28.05.2007 в 18:56)
| | на документе, начинающемся с https:, (или с чего нибудь совсем экзотического) оба Ваши варианта пойдут прахом. | |
|
|
|
|
|
|
|
для: Trianon
(28.05.2007 в 19:01)
| | Про https не было сказано ни слова. Спросили "как это сделать?" - я ответил. Причем 2 варианта привел. Вот.
А Вы как предлагаете отгадывать чего там хотел юзер вводить http:// или https:// ?
___
ЗЫЖ ошибку понял... сам дурак :) | |
|
|
|
|
|
|
|
для: kasmanaft
(28.05.2007 в 19:09)
| | не отгадывать. Отвергать. | |
|
|
|
|
|
|
|
для: Trianon
(28.05.2007 в 19:26)
| | Ну отвергать наверное слишком.. не всякий пользователь знает что значит "http://" и ему подобное. Может быть и не догадается чего от него хотят.
А как правильно вообще scheme описать?
<?
if (!preg_match("#^[a-z0-9\+\.-]+:[a-z]*//.+$#i", $url))
$url = 'http://' . $url; // не важно
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(28.05.2007 в 19:50)
| | >Ну отвергать наверное слишком.. не всякий пользователь знает что значит "http://" и ему подобное. Может быть и не догадается чего от него хотят.
В шредер.
Тех, кто не знает, что такое шредер, и не знает как /не хочет узнать - в шредер.
>А как правильно вообще scheme описать?
>
><?
>if (!preg_match("#^[a-z0-9+.-]+:[a-z]*//.+$#i", $url))
> $url = 'http://' . strtolower($url); // не важно
>
|
не стоит её писать. Полагаю, нужно ограничиться кардинальными http, https, ftp, а остальное - в шредер. А то натолкают всяких javascript:// и безопасность уйдет в шредер. Поди потом расхлебывай. | |
|
|
|
|
|
|
|
для: Night_Charter
(28.05.2007 в 18:49)
| | >Проверку при заполнении я не хочу делать
Придется сделать. Любые другие решения будут заведомо приводить к неопределенному поведению.
Есть четкое определение URL . И никакие обрезки под него не попадают.
Пусть любой браузер позволяет вводить их в строке адреса - он позволяет вводить адрес.
URL - сущность куда более жесткая. | |
|
|
|
|
|
|
|
для: Trianon
(28.05.2007 в 18:57)
| | Ладно, буду делать проверку :) | |
|
|
|
|
|
|
|
для: Night_Charter
(28.05.2007 в 18:49)
| | Мой пример может быть не гибким, не гуманным, дырявым и т.п. Но тем не менее он работает в моем каталоге сайтов:
<?
$errors = 0;
if(isset($_POST['url']) && $_POST['url'] != "")
{
$url = $_POST['url'];
if (preg_match('|[^-a-z0-9_\.\:\/]|i', $url))
{
echo "<br /><br /><center><strong>Если хотите добавить сайт в каталог, то ведите нормальный URL</strong></center>";
$errors = 1;
}
else
{
$errors = 0;
}
}
else
{
echo "<br /><center><strong>Введите URL</strong></center><BR>";
$errors = 1;
}
$massiv = parse_url($url);
$url = preg_replace("/(http:\/\/|www\.)/", "", "$massiv[host]"); // оставляем имя сайта вида site.ru
if ($errors == 0)
{
$query = mysql_query("SELECT * FROM sites WHERE url = '".$url."'"); // проверяем на дубликаты
if (mysql_num_rows ($query) > 0)
{
echo "<br /><br /><center><strong>Сайт с таким URL уже присутствует в каталоге!</strong></center>";
$errors = 1;
}
}
if ($errors != 0)
{
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='5; URL=http://". $_SERVER['HTTP_HOST'] ."/sites/add/'></HEAD></HTML>";
echo "<center><strong>Вернитесь и правильно заполните все обязательные поля формы!</strong></center>";
die ();
}
if ($errors == 0)
{
$url = substr($url, 0, 32); // обрезаем до 32 символов (только для главной страницы сайта)
if (!empty($url)) // вставляем в БД
{
$query = "INSERT sites SET
url = '".$url."',
";
}
else echo "<br /><br /><br /><br /><br /><center><strong>АшЫпка выполнения программы. Попробуйте внести информацию еще раз.<br />В частности уделите особое внимание написанию URL !!!</strong></center>";
$result = mysql_query($query);
if($result)
{
$title = "Сайт добавлен в каталог";
$keywords = "Каталог сайтов";
$description = "Каталога сайтов";
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='7; URL=http://". $_SERVER['HTTP_HOST'] ."/sites/'></HEAD></HTML>";
echo "<br /><center><strong>Данные отправлены модератору<br />После проверки на соответствие требованиям,<br />сайт будет доступен для просмотра в каталоге</strong></center>";
}
else
{
exit("Ошибка при размещении сайта");
}
}
?>
|
| |
|
|
|