web-dev-qa-db-ja.com

別のURLを含むURLのGET要求パラメーターの解析

URLは次のとおりです。

http://localhost/test.php?id=http://google.com/?var=234&key=234

そして、完全な$ _GET ['id']または$ _REQUEST ['d']を取得できません。

<?php
print_r($_REQUEST['id']); 
//And this is the output http://google.com/?var=234
//the **&key=234** ain't show 
?>
16
kedomonzter
$get_url = "http://google.com/?var=234&key=234";
$my_url = "http://localhost/test.php?id=" . urlencode($get_url);

$ my_urlの出力:

http://localhost/test.php?id=http%3A%2F%2Fgoogle.com%2F%3Fvar%3D234%26key%3D234

そのため、$_GET['id']または$_REQUEST['id'](デコード済み)を使用してこの値を取得できます。

echo urldecode($_GET["id"]);

出力

http://google.com/?var=234&key=234

すべてのGETパラメーターを取得するには:

foreach ($_GET as $key=>$value) {
  echo "$key = " . urldecode($value) . "<br />\n";
  }

$keyはGETキーで、$value$keyのGET値です。

または、別のソリューションを使用してGETパラメーターの配列を取得できます

$get_parameters = array();
if (isset($_SERVER['QUERY_STRING'])) {
  $pairs = explode('&', $_SERVER['QUERY_STRING']);
  foreach($pairs as $pair) {
    $part = explode('=', $pair);
    $get_parameters[$part[0]] = sizeof($part)>1 ? urldecode($part[1]) : "";
    }
  }

$get_parametersは、URLデコードされた$_GETと同じです。

35
Wh1T3h4Ck5

URLの作成中に urlencode でエンコードします

$val=urlencode('http://google.com/?var=234&key=234')

<a href="http://localhost/test.php?id=<?php echo $val ?>">Click here</a>

そして、フェッチ中にデコード urldecode

9
Shakti Singh

同様の問題があり、parse_urlおよびparse_strは、パラメータ内のURLが正しくURLエンコードされている限り(これが確実に必要です)、実際のURLのすべてのパラメータと、クエリパラメータ内のエンコードされたURLのパラメータの両方にアクセスできます。そう:

$get_url = "http://google.com/?var=234&key=234";
$my_url = "http://localhost/test.php?id=" . urlencode($get_url);

function so_5645412_url_params($url) {
    $url_comps = parse_url($url);
    $query = $url_comps['query'];

    $args = array();
    parse_str($query, $args);

    return $args;
}

$my_url_args = so_5645412_url_params($my_url); // Array ( [id] => http://google.com/?var=234&key=234 )
$get_url_args = so_5645412_url_params($my_url_args['id']); // Array ( [var] => 234, [key] => 234 )
2
Simon

文字列「http://google.com/?var=234&key=234」で rlencode を使用する必要がある場合があります

2
Extrakun

あなたは次のような悪いキャラクターを使用していますか? and&and etc ...

新しいコードに編集します

このリンクをご覧ください

また、urlencodeを使用することができます

$val=urlencode('http://google.com/?var=234&key=234')
1

正しいphpの方法は、parse_url()を使用することです

http://php.net/manual/en/function.parse-url.php

(PHPマニュアルから)

この関数は、URLを解析し、存在するURLのさまざまなコンポーネントのいずれかを含む連想配列を返します。

この関数は、指定されたURLを検証するためのものではなく、上記のURLに分割するだけです。部分的なURLも受け入れられ、parse_url()はそれらを正しく解析するために最善を尽くします。

0
aimiliano