Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Переадресация с http://

Сообщения:  [1-10] 

 
 автор: provodnik   (29.05.2007 в 09:56)   письмо автору
 
   для: 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($url032); // обрезаем до 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(
"Ошибка при размещении сайта");
    }
}
?>

   
 
 автор: Trianon   (28.05.2007 в 19:58)   письмо автору
 
   для: 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:// и безопасность уйдет в шредер. Поди потом расхлебывай.

   
 
 автор: kasmanaft   (28.05.2007 в 19:50)   письмо автору
 
   для: Trianon   (28.05.2007 в 19:26)
 

Ну отвергать наверное слишком.. не всякий пользователь знает что значит "http://" и ему подобное. Может быть и не догадается чего от него хотят.
А как правильно вообще scheme описать?

<?
if (!preg_match("#^[a-z0-9\+\.-]+:[a-z]*//.+$#i"$url))
    
$url 'http://' $url// не важно

   
 
 автор: Night_Charter   (28.05.2007 в 19:44)   письмо автору
 
   для: Trianon   (28.05.2007 в 18:57)
 

Ладно, буду делать проверку :)

   
 
 автор: Trianon   (28.05.2007 в 19:26)   письмо автору
 
   для: kasmanaft   (28.05.2007 в 19:09)
 

не отгадывать. Отвергать.

   
 
 автор: kasmanaft   (28.05.2007 в 19:09)   письмо автору
 
   для: Trianon   (28.05.2007 в 19:01)
 

Про https не было сказано ни слова. Спросили "как это сделать?" - я ответил. Причем 2 варианта привел. Вот.
А Вы как предлагаете отгадывать чего там хотел юзер вводить http:// или https:// ?
___
ЗЫЖ ошибку понял... сам дурак :)

   
 
 автор: Trianon   (28.05.2007 в 19:01)   письмо автору
 
   для: kasmanaft   (28.05.2007 в 18:56)
 

на документе, начинающемся с https:, (или с чего нибудь совсем экзотического) оба Ваши варианта пойдут прахом.

   
 
 автор: Trianon   (28.05.2007 в 18:57)   письмо автору
 
   для: Night_Charter   (28.05.2007 в 18:49)
 

>Проверку при заполнении я не хочу делать

Придется сделать. Любые другие решения будут заведомо приводить к неопределенному поведению.

Есть четкое определение URL . И никакие обрезки под него не попадают.
Пусть любой браузер позволяет вводить их в строке адреса - он позволяет вводить адрес.
URL - сущность куда более жесткая.

   
 
 автор: kasmanaft   (28.05.2007 в 18:56)   письмо автору
 
   для: 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($url07) !== 'http://')
    
$url 'http://'.$url;
echo 
$url;
?>

   
 
 автор: Night_Charter   (28.05.2007 в 18:49)   письмо автору
 
 

Доброго времени суток. Сразу к делу :)
Поьзователь заполняет к свойствах профиля поле: 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://", оставляем как есть и делаем редирект.
Всего две строчки регэкспов. Заранее благодарен!

   

Сообщения:  [1-10] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования