복붙노트

url 매개 변수로 배열 전달하기

PHP

url 매개 변수로 배열 전달하기

URL 매개 변수로 배열을 전달할 수있는 가장 좋은 방법은 무엇입니까? 가능하다면 나는 생각하고 있었다.

$aValues = array();

$url = 'http://www.example.com?aParam='.$aValues;

또는 이것에 대해 :

$url = 'http://www.example.com?aParam[]='.$aValues;

필자는 예제를 읽었지만, 지저분 해 보인다.

$url = 'http://www.example.com?aParam[]=value1&aParam[]=value2&aParam[]=value3';

해결법

  1. ==============================

    1.매우 간단한 솔루션이 있습니다 : http_build_query (). 쿼리 매개 변수를 연관 배열로 사용합니다.

    매우 간단한 솔루션이 있습니다 : http_build_query (). 쿼리 매개 변수를 연관 배열로 사용합니다.

    $data = array(
        1,
        4,
        'a' => 'b',
        'c' => 'd'
    );
    $query = http_build_query(array('aParam' => $data));
    

    돌아올거야.

    string(63) "aParam%5B0%5D=1&aParam%5B1%5D=4&aParam%5Ba%5D=b&aParam%5Bc%5D=d"
    

    이 문자열은 aParam [0] = 1 & aParam [1] = 4 & aParam [a] = b & aParam [c] =와 같으므로 http_build_query ()가 필요한 모든 이스케이프를 처리합니다 (% 5B => [및 % 5D =>] 디.

  2. ==============================

    2.편집 : 매우 편리한 http_build_query () 함수를 사용하는 Stefan의 위의 솔루션을 놓치지 마세요. https://stackoverflow.com/a/1764199/179125

    편집 : 매우 편리한 http_build_query () 함수를 사용하는 Stefan의 위의 솔루션을 놓치지 마세요. https://stackoverflow.com/a/1764199/179125

    knittl 바로 이스케이프에 관한 것입니다. 그러나이를 수행하는 더 간단한 방법이 있습니다.

    $url = 'http://example.com/index.php?';
    $url .= 'aValues[]=' . implode('&aValues[]=', array_map('urlencode', $aValues));
    

    연관 배열을 사용하여이 작업을 수행하려는 경우 대신 다음을 시도하십시오.

    PHP 5.3 이상 (람다 함수)

    $url = 'http://example.com/index.php?';
    $url .= implode('&', array_map(function($key, $val) {
        return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
      },
      array_keys($aValues), $aValues)
    );
    

    PHP <5.3 (콜백)

    function urlify($key, $val) {
      return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
    }
    
    $url = 'http://example.com/index.php?';
    $url .= implode('&amp;', array_map('urlify', array_keys($aValues), $aValues));
    
  3. ==============================

    3.가장 쉬운 방법은 serialize 함수를 사용하는 것입니다.

    가장 쉬운 방법은 serialize 함수를 사용하는 것입니다.

    저장 또는 전송을 위해 모든 변수를 직렬화합니다. 당신은 그것에 대한 PHP 매뉴얼을 읽을 수 있습니다 - serialize

    변수는 unserialize를 사용하여 복원 할 수 있습니다.

    그래서 당신이 사용하는 URL로 전달 :

    $ url = urlencode (serialize ($ array))

    사용하는 변수를 복원하려면

    $ var = unserialize (urldecode ($ _ GET [ 'array']))

    여기 조심해라. GET 요청의 최대 크기는 4k로 제한되어 있습니다.이 크기는 URL에 배열을 전달하여 쉽게 초과 할 수 있습니다.

    또한 실제로 데이터를 전달하는 가장 안전한 방법은 아닙니다. 대신 세션을 사용하는 방법을 고려해야합니다.

  4. ==============================

    4.출력 할 때 변수를 이스케이프하십시오 (urlencode).

    출력 할 때 변수를 이스케이프하십시오 (urlencode).

    배열을 인쇄 할 수는 없지만 루프를 사용하여 URL을 작성해야합니다.

    $url = 'http://example.com/index.php?'
    $first = true;
    foreach($aValues as $key => $value) {
      if(!$first) $url .= '&amp';
      else $first = false;
      $url .= 'aValues['.urlencode($key).']='.urlencode($value);
    }
    
  5. ==============================

    5.직렬화 된 데이터 base64로 인코딩하면됩니다. 가장 좋고 작은 방법입니다. urlencode는 많은 공간을 낭비하는 것이며 4k 만 있습니다.

    직렬화 된 데이터 base64로 인코딩하면됩니다. 가장 좋고 작은 방법입니다. urlencode는 많은 공간을 낭비하는 것이며 4k 만 있습니다.

  6. ==============================

    6.

     <?php
    $array["a"] = "Thusitha";
    $array["b"] = "Sumanadasa";
    $array["c"] = "Lakmal";
    $array["d"] = "Nanayakkara";
    
    $str = serialize($array);
    $strenc = urlencode($str);
    print $str . "\n";
    print $strenc . "\n";
    ?> 
    

    print $ str. "\엔"; s : 1 : "b"; s : 10 : "Sumanadasa"; s : 1 : "c"; s : 6 : "Lakmal"; s : 1 : "d"; s : 11 : "Nanayakkara";} 과

    $ strenc를 출력하십시오. "\엔"; 주는

    a%3A4%3A%7Bs%3A1%3A%22a%22%3Bs%3A8%3A%22Thusitha%22%3Bs%3A1%3A%22b%22%3Bs%3A10%3A%22Sumanadasa%22%3Bs%3A1%3A%22c%22%3Bs%3A6%3A%22Lakmal%22%3Bs%3A1%3A%22d%22%3Bs%3A11%3A%22Nanayakkara%22%3B%7D
    

    따라서이 $ 배열을 URL을 통해 page_no_2.php에 전달하려면,

    전의:-

    $url ='http://page_no_2.php?data=".$strenc."';
    

    원래 배열로 되돌아 가려면 page_no_2.php에서 다음과 같이 urldecode ()를 실행 한 다음 unserialize ()를 수행해야합니다.

        <?php
        $strenc2= $_GET['data'];
        $arr = unserialize(urldecode($strenc2));
        var_dump($arr);
        ?>
    

    주는

     array(4) {
      ["a"]=>
      string(8) "Thusitha"
      ["b"]=>
      string(10) "Sumanadasa"
      ["c"]=>
      string(6) "Lakmal"
      ["d"]=>
      string(11) "Nanayakkara"
    }
    

    다시 : D

  7. ==============================

    7.이것은 이미 답변 되었기 때문에 직접적인 대답은 아니지만 모두가 데이터를 전송하는 것에 대해 이야기하고 있지만 아무도 실제로 거기에 도착했을 때 아무도 말하지 않았으며 해결을 위해 30 분이 걸렸습니다. 그래서 내가 여기서 도울 것이라고 생각 했어.

    이것은 이미 답변 되었기 때문에 직접적인 대답은 아니지만 모두가 데이터를 전송하는 것에 대해 이야기하고 있지만 아무도 실제로 거기에 도착했을 때 아무도 말하지 않았으며 해결을 위해 30 분이 걸렸습니다. 그래서 내가 여기서 도울 것이라고 생각 했어.

    나는이 비트를 반복 할 것이다.

    $data = array(
    'cat' => 'moggy',
    'dog' => 'mutt'
    );
    $query = http_build_query(array('mydata' => $data));
    $query=urlencode($query);
    

    분명히 당신은이 형식보다 더 나은 형식을 취할 것입니다. www.someurl.com?x=$query

    그리고 데이터를 다시 얻으려면

    parse_str($_GET['x']);
    echo $mydata['dog'];
    echo $mydata['cat'];
    
  8. ==============================

    8.

    **in create url page**
    
    $data = array(
            'car' => 'Suzuki',
            'Model' => '1976'
            );
    $query = http_build_query(array('myArray' => $data));
    $url=urlencode($query); 
    
    echo" <p><a href=\"index2.php?data=".$url."\"> Send </a><br /> </p>";
    
    **in received page**
    
    parse_str($_GET['data']);
    echo $myArray['car'];
    echo '<br/>';
    echo $myArray['model'];
    
  9. from https://stackoverflow.com/questions/1763508/passing-arrays-as-url-parameter by cc-by-sa and MIT license