2013-02-19 2 views
0

Попытка использовать переменную в $ _GET [ 'URL'], чтобы получить данные из URL:

http://mysite.com/?url=http://this.is/?q=an&?example=url

То, что я хочу выше жирным шрифтом, но, к сожалению $ _GET ['url'] получит только «http: // this.is/?q=an», потому что & интерпретирует его как начало новой переменной в URL-адресе.

Есть ли способ игнорировать амперсанды, чтобы мой сценарий мог получить весь URL-адрес, в котором я нуждаюсь? URL-адрес, который добавлен к? Url =, не входит в мои пределы для контроля, поэтому большая часть работы, но некоторые из них содержат страшный &. После прочтения вопросов на переполнение стека я не протягивал большие надежды :(

+1

'URL Encode' ваша строка' GET' перед отправкой страницы. Затем 'URL Decode'' $ _GET', прежде чем манипулировать им. – Jeremy1026

ответ

4

Если у вас нет абсолютно никакого контроля над аргументами, размещенных на строке запроса (по любой причине), вам может также сделать это вручную разборе $_SERVER['QUERY_STRING'] varible, например

$page = str_replace("url=", "", $_SERVER['QUERY_STRING']); 

конечно, если это возможно, вы должны кодировать его, используя ответы, размещенные на всех остальных.

+0

+1 для фактического принятия к сведению, что «URL-адрес не находится в моих пределах для контроля» и предоставляет OP альтернативный способ получения всего URL-адреса , –

+0

Работал отлично, спасибо! Цените, что вы даете мне ответ без urlencode(), который я не могу использовать. – user2087479

1

Используйте urlencode()

$get_url = urlencode('http://this.is/?q=an&?example=url'); 
$url = 'http://mysite.com/?url=' . $get_url; 
+0

ehm ... у вас есть ошибка в вашем примере с именами var. – Philipp

0

Если вы не можете контролировать строку запроса, вы можете использовать

$query = $_SERVER['QUERY_STRING']; 
$pos = strpos($query, "url="); 
if ($pos !== false) { 
    $url = substr($query, $pos + 4); 
} 

Этот код возвращает Everthing после url=

Если у вас есть возможность, вы должны кодировать URL с urlencode для создания чистого URL , Если вы этого не сделаете, вы получите в конечном итоге ошибку сервера со странными URL-адресами, и вы не сможете передать более одного URL-адреса (потому что все после url = интерпретируется как URL-адрес)

0

Вот протестированный код :

if (!empty($_GET['url'])) { 
    echo $_GET['url'].'<br />'; 
} 
$url = urlencode('http://this.is/?q=an&?example=url'); 
echo '<a href="http://mysite.com/?url='.$url.'">LINK</a>'; 

Надеюсь, это вам поможет.