2013-12-24 2 views
0

Я попытался создать сценарий, где, когда пользователь вводит URL-адрес и нажимает Go, он перейдет на эту веб-страницу. Я сделал это, но заметил, что он работал только сПростое перенаправление проблемы с скриптом

http:// 

перед ним. Таким образом, я использовал StrPos функции для проверки

http:// 

находится в строке, и если это не будет добавлять его к URL и перейти на сайт. Это работает, но теперь, когда пользователь вводит URL-адрес с «Http: //» это удвоит его так, что это будет что-то вроде:

'http://http://www.example.com'. 

Как я могу это исправить? Это код:

<? 

if ($_POST['submit']) { 

$urlgo = $_POST['url']; 

if (strpos($urlgo,'http://') == false) { 

$url = "http://$urlgo"; 
header("Location: $url "); /* Redirect browser */ 

} else { 

$urlgo = $_POST['url']; 

header("Location: $urlgo "); /* Redirect browser */ 

exit; 
} 

} 


?> 

ответ

1
if (strpos($urlgo,'http://') == false) { 

проблема. strpos может вернуть LEGITIMATE 0, если строка «игла» (http://) находится в начале «стога сена» ($urlgo). 0 == false ИСТИНА в PHP. Вы должны использовать строгий оператор сравнения:

if (strpos(...) === false) { 

(примечание, = признаки), который сравнивает тип и значение. 0 === false FALSE в php.

+0

Как получилось, что вторая часть кода действительно работает, если == false действительно означает «истина»? Потому что, когда вы набираете google.com, он не будет работать без http: //. – user3102740

+0

Переадресации «Расположение», по спецификациям http, должны быть полным URL. Для удобства браузеры МОГУТ БЫТЬ мягкими и видеть, что «Местоположение: google.com» имеет перенаправление на google. Но по строгой спецификации перенаправление не должно работать или пытаться ударить файл под названием google.com на том же сайте, что и при вызове заголовка. –

Смежные вопросы