Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Подстоновка строки к строке полученной через $_POS


Автор: TWoVKP 21.2.2010, 23:02
Такая вот проблема, через форму получаю в скрипт обработчик - адрес сайта ($_POST), юзер может написать адрес сайта по разному, ну например:

http://www.test.com

или

https://www.test.com

или

www.test.com

или просто

test.com

ну вообшем надо проверить что именно ввёл юзер и если адрес введён таким образом: test.com, то надо впереди подставить - http://www. чтобы получился полный адрес сайта - http://www.test.com!

Как такое можно реализовать, может кто сталкивался!!! Желательно на примере  smile  smile  smile 

Буду очень благодарен за любую помошь!  smile 

Автор: TWoVKP 22.2.2010, 00:23
Нашёл решение, может и не самое корректное, но до другого пока не додумался, может кто знает как правильнее и лучше сделать можно, то пожалуйста дайте хоть намёк, конечно же с небольшим примером.

Так решил задачу:

$web_site - переменная хранит адрес полученный их формы

Код

        //получить имя хоста из URL
    preg_match("/^(http:\/\/)?([^\/]+)/i",$web_site, $matches);
    $host = $matches[2];
    // получить два последних сегмента имени хоста
    preg_match("/[^\.\/]+\.[^\.\/]+$/",$host,$matches);
    $web_site = "http://www.".$matches[0]."\n";



Может кому пригодится!

Автор: TWoVKP 22.2.2010, 00:46
Решение конечно не самое лучшее, вот если например юзер захочет мне послать ссылку на свой сайт уже сразу на страницу с контактной инфой (например www.test.ru/blcoks/contact.php), то всё равно попадаешь на индексную страницу а то есть на - http://www.test.ru


Подправте скрипт кто может, что бы было всё как надо, то есть в концовке ничего не обрезалось, а только в начале строки при отсутствие "http://www." подставлялось что нужно, ну например - http://www. или же только http:// если юзер уже ввёл www

Автор: Ипатьев 22.2.2010, 01:50
А почему бы просто не проверить, являются ли первые 7 символов строкой "http://"?

Автор: TWoVKP 22.2.2010, 09:22
Ипатьев

Ну тогда уж надо проверять первые 11 символов, юзер же может ввести адрес и без www.
А какой функцией можно сделать проверку первых n символов???

А вообще вариант на мой взгляд не совсем лучший, допусти что юзер вводит адрес без всяких http://www., тогда по логике надо в начале просто подставить необходимый текст, в нашем случаии http://www., а что если юзер вместо этого внчале введёт какую-нибудь абракадабру например - kjhjjh.test.ru, скажем забыл переключить раскладку клавы, ну или спецом так сделал то тогда наша проверка обнаружит что вначале нету необходимых символов и просто спереди их подставит и мы в итоге получим адресс - http://www. kjhjjh.test.ru

Автор: skyboy 22.2.2010, 09:29
Цитата(TWoVKP @  22.2.2010,  08:22 Найти цитируемый пост)
А какой функцией можно сделать проверку первых n символов???

http://php.net/substr
Цитата(TWoVKP @  22.2.2010,  08:22 Найти цитируемый пост)
а что если юзер вместо этого внчале введёт какую-нибудь абракадабру

а что, если "юзер введет" вообще не существующий адрес сайта? каким образом можно по введенному "fake.org" получить необходимый "test.com"?

Автор: TWoVKP 22.2.2010, 09:40
skyboy

нет я в смысле что если вместо http://www. будет введён kjhjjh. то тогда вся проверка была скажем так не еффективной, то есть юзер хотел ввести http://www.test.ru а ввёл по ошибке kjhjjh.test.ru, тогда проверка проверит строку и не обнаружит таким http://www. и просто спереди подставит

Например мой вариант решения этой задачи справится с этим, и точно определит адресс, даже если было введено  kjhjjh.test.ru получу в итоге http://www.test.ru

Проблема ы моём решении заключается в том что, если вдруг юзер введёт адрес test.ru/contackts.php, скажем так чтобы я сразу мог посмотреть контактную инфу, то я в итого получу следующий адрес http://www.test.ru, то есть уже без ссылки на нужную страницу, а сразу на индексную

Автор: skyboy 22.2.2010, 11:19
Цитата(TWoVKP @  22.2.2010,  08:40 Найти цитируемый пост)
даже если было введено  kjhjjh.test.ru получу в итоге http://www.test.ru

а если сайт как раз на поддомене и находится? получить вместо "somtesite.ucoz.net" сайт платформы "ucoz.net" - это то, что и ожидается? о_0 т.е. maps.google.com и google.com - одно и то же? неожиданно.

Автор: TWoVKP 22.2.2010, 11:20
Решил проблему ещё проще, сначала проверяю полученный адрес до первой встречающейся точки в строке, будь то www. или http://www. или вообще будь там абракадабра и кладу результат в переменную, потом переменную проверяю совпадает ли она с www или http://www и если нет то просто подставляю в начало.

Вообшем вот пример:

Код

    $prob = strtok ($web_site, ".");
    echo $prob."<br/>";    
    if($prob != "www" && $prob != "http://www")
    {
        $web_site = "http://www.".$web_site;
        echo $web_site;
        echo "<br/>";
    }
    if($prob == "www")
    {
        $web_site = "http://".$web_site;
        echo $web_site;
        echo "<br/>";
    }


Считаю что тема исчерпана!!!

Добавлено @ 11:23
skyboy

А как с этим примером??? Так покатит???
И рефссылка остаётся неизменной!!!


Хотелось бы критику услышать на на этот способ решения!

Автор: Ипатьев 22.2.2010, 13:34
не понимаю, зачем насильно подставлять www

Автор: IgorIV 22.2.2010, 13:46
TWoVKP, 
Проверь
http://en.wikipedia.org/
http://docs.php.net/manual/en/langref.php
http://xcache.lighttpd.net/browser

Автор: TWoVKP 22.2.2010, 13:53
Ипатьев 

Да я могу коротко объяснить, вот например юзер послал мне письмо и ввёл мне свой адрес сайта через форму, письма я получаю пргогой The BAT, всем наверное известная, ну так вот если адрес сайта присылается как test.ru, без всяких www или http:// то прога выдаёт ошибку и даже браузер не стартует, а вот если пришло как http://www.test.ru то всё пучком, вот только и для этого я и старался. Не знаю на счёт других почтовых клиентов, но с The BAT v.4.1.11 такая вот история.

Просто хотел чтобы уж если письмо приходило и я его открывал с этой прогой - то чтобы уж всё пучком работало!

Вот в принципе и весь смысл!

Добавлено через 2 минуты и 55 секунд
IgorIV 

ХМ..., интересно, об этом и не подумал, придётся кое-что подправить

Спасибо за подсказку smile 

Автор: Ипатьев 22.2.2010, 15:47
Вы очень невнимательны.
Прочтите мое сообщение, на которое вы потрудились ответить, еще раз.
Подсказка: про http:// там ничего нет. там написано другое слово

Автор: TWoVKP 22.2.2010, 17:17
Ипатьев 


Да внимательный я, заметил что речб ведётся о www а не о http://
ну просто как то хочется чтобы уже было всё в идеале!

Автор: Ипатьев 22.2.2010, 17:43
Для того, чтобы сделать идеально, надо понимать, что такое идеал.
А если познания в предмете не очень велики, стремление к идеалу приведет к прямо противоположным результатам
Что мы наглядно можем наблюдать в данном топике smile

Автор: TWoVKP 22.2.2010, 17:56
Да это понятно, но к идеалу всегда нужно стремиться, а вот только если чел ничего толком сам не может предложить а только чужие идеи и решение покритиковать способен, то тут об идеале речь вообще не может идти, не только о профессиональном но и как о человеке. smile  smile  smile 

Раз такой умный взял бы и предложил путёвое решение, или сам на такое не способен, способен только наверное только языком почесать!!!  smile 

Или ты живёшь по принципу: "Есть два мнения: мое и другое ошибочное!"

Что мы в данном топике и видим, чел ничего толкого сам предложит не может, а вот чужие идеи (у которого своих ну просто нет), всегда готов засрать!

Таковы реали, взгляни правде в глаза, или что правда глаза колит!

 smile 


Автор: skyboy 22.2.2010, 18:26
Цитата(TWoVKP @  22.2.2010,  16:56 Найти цитируемый пост)
аз такой умный взял бы и предложил путёвое решение

тебе и предлагали. 4 пост темы. проверить первые 7 символов на соответствие "http://". если нет такого - добавить впереди строки.
хотя лично я бы искал "://", чтоб пропустить "https://" ссылки. хотя, в таком случае, прошли бы и "ftp://"-ссылки. но использовать регулярки ради такой простой задачи неохота.

Автор: Ипатьев 22.2.2010, 18:57
Мне кажется, что выступления в таком тоне недопустимы на профессиональном форуме.
Хамство и переход на личности не должны оставаться безнаказанными.
Но в первую очередь конечно - эти поучительные интонации.

Автор: TWoVKP 22.2.2010, 19:34
skyboy

Не ну это понятно что первые символы проверять надо, до этого в приципе каждый бы додумался что проверять надо, а вот как это на практике реализовать, не все же могут на php отлично кодить, для этого и сущестсвуют форумы чтобы на них обсуждать и вместе пытаться найти подходящее решение, а не выяснять личные отношения, этого негатива и в реальной жизни хватает. Я ничего не имею против - Ипатьев, но раз уж критикует так пусть хоть какую то умную мысль на тему топика выскажет, иль какой пример покажет раз уж он "идеал" в php. А судить то каждый горазд!


Ипатьев

Раз уж выступления в таком тоне недопустимы на профессиональном форуме и необходимо не оставлять безнаказанным - то можно в принципе и так, только что это изменит????
На личности вроде не старался переходить и никогда этого не делаю до тех пор пока не встречаю обратного! Извиняюсь, если затронул "собственное Я".


Да ладно хватит уже одно да потому, лучше посоветуйте как проблему правильно решить, то что необходима проверка символов это и дураку понятно, как на php решить задачу правильно, на примере было бы лучше всего  smile 

Автор: sTa1kEr 22.2.2010, 22:51
TWoVKP, для начала, что бы решить эту задачу правильно, вам нужно внимательно прочитать что такое http://ru.wikipedia.org/wiki/URL  и навсегда запомнить, что http://example.com и http://www.example.com это два совершенно разных URL, указывающих на совершенно разные ресурсы в интернете. 

После чего задача элементарно решается способом предложенным skyboy и функцией http://php.net/substr

Код

if (substr($url, 0, 7) != 'http://' && substr($url, 0, 8) != 'https://') {
    $url = 'http://'.$url;
}

Автор: IZ@TOP 25.2.2010, 19:29
TWoVKP, вообще-то, Ипатьев и предложил единственно простое и верное решение для Вашего случая.
На форум приходят обсуждать вопросы связанные с PHP - это верное. Сюда приходят в надежде разрешить проблему и понять где могли ошибиться или в поисках алгоритма, лучшего варианта решения проблемы. Но сюда не заходят для справки по функциям, для этого есть php.net.

Автор: Nigel 25.2.2010, 23:42
Любителям рег. выражений (подставляется http:// вначале).
Код

echo preg_replace_callback("~(http:\/\/)?(.*)~i",
    create_function(
        '$m',
        'return empty($m[1]) ? "http://" . $m[2] : $m[1] . $m[2];'
    ),
    "test.com", 1
);

Кому надо проверку на www еще, подправьте под себя сами smile 

Автор: IZ@TOP 26.2.2010, 15:10
Я бы за такой код убивал на месте.

Автор: Nigel 26.2.2010, 21:45
изатоп такой изатоп

Автор: IZ@TOP 27.2.2010, 09:46

M
IZ@TOP
Не флудим
Сбежавшим из лепрозория просьба вернуться обратно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)