복붙노트

쿼리 문자열 내에서 배열을 전달하는 방법?

PHP

쿼리 문자열 내에서 배열을 전달하는 방법?

쿼리 문자열을 통해 배열을 전달하는 표준 방법이 있습니까?

명확히하기 위해, 나는 배열 값이 될 여러 값을 가진 질의 문자열을 가지고있다. 해당 쿼리 문자열 값을 배열로 처리해야합니다. 배열을 분해하여 다른 쿼리 문자열 변수와 구분할 수 없도록하고 싶습니다.

또한이 게시물 답변에 따르면 저자는 배열에 대한 쿼리 문자열 지원이 정의되지 않았 음을 제안합니다. 정확합니까?

편집하다:

@ Alex의 답을 바탕으로 표준화 된 방법이 없으므로 필자가 읽고있는 매개 변수가 PHP와 Javascript의 배열이라는 것을 쉽게 인식 할 수있는 방법은 무엇입니까?

여러 개의 매개 변수에 동일한 이름을 붙이면 수용 할 수 있습니까? 그런 식으로 배열에 속한다는 것을 알 수 있습니까? 예:

?myarray=value1&myarray=value2&myarray=value3...

아니면 나쁜 행동일까요?

해결법

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

    1.여기에 내가 알아 낸 것이있다.

    여기에 내가 알아 낸 것이있다.

    다중 값 양식 필드를 제출하는 것, 즉 GET / POST 변수를 통해 배열을 제출하는 것은 표준이 반드시 철자 될 필요가 없기 때문에 여러 가지 방법으로 수행 할 수 있습니다.

    다중 값 필드 나 배열을 전송하는 세 가지 방법은 다음과 같습니다.

    양식에서 다중 값 필드는 다중으로 설정된 선택 상자의 형태를 취할 수 있습니다.

    <form> 
        <select multiple="multiple" name="cars[]"> 
            <option>Volvo</option> 
            <option>Saab</option> 
            <option>Mercedes</option> 
        </select>
    </form>
    

    (참고 :이 경우 select 컨트롤을 some_name []으로 명명하여 결과 요청 변수가 PHP에 의해 배열로 등록되도록하는 것이 중요합니다)

    ... 또는 같은 이름의 여러 숨겨진 필드로 :

    <input type="hidden" name="cars[]" value="Volvo">
    <input type="hidden" name="cars[]" value="Saab">
    <input type="hidden" name="cars[]" value="Mercedes">
    

    참고 : 여러 값으로 필드 []를 사용하는 것은 실제로 문서화가 잘되어 있지 않습니다. 쿼리 문자열 - Wikipedia의 다중 값 키 또는 다중 선택 입력을 처리하는 W3C 문서의 섹션에서 이에 대한 언급이 없습니다.

    최신 정보

    주석가들이 지적했듯이, 이것은 매우 프레임 워크에 따라 다릅니다. 몇 가지 예 :

    쿼리 문자열 :

    ?list_a=1&list_a=2&list_a=3&list_b[]=1&list_b[]=2&list_b[]=3&list_c=1,2,3
    

    울타리:

    "list_a": "3", 
    "list_b":[
        "1",
        "2",
        "3"
      ], 
    "list_c": "1,2,3"
    

    모난:

     "list_a": [
        "1",
        "2",
        "3"
      ],
      "list_b[]": [
        "1",
        "2",
        "3"
      ],
      "list_c": "1,2,3"
    

    (각도 토론)

    node.js, Wordpress, ASP.net의 예제에 대한 주석보기

    주문 유지 : 고려해야 할 또 하나의 점은 항목의 순서 (정렬 된 목록으로 배열)를 유지해야하는 경우 분리 된 값 목록을 전달하는 옵션이 하나만 있고 배열 자체로 명시 적으로 변환한다는 것입니다 .

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

    2.쿼리 문자열은 텍스트 데이터를 전달하므로 옵션이 없어도 배열을 분해하고 올바르게 인코딩 한 다음 원하는 표현 형식으로 전달할 수 있습니다.

    쿼리 문자열은 텍스트 데이터를 전달하므로 옵션이 없어도 배열을 분해하고 올바르게 인코딩 한 다음 원하는 표현 형식으로 전달할 수 있습니다.

    p1 = value1 & pN = valueN ... 데이터 = [값 1, ..., 값 N] 데이터 = {p1 : 값 1, ..., pN : 값 N}

    서버 측 코드에서 디코드하십시오.

  3. ==============================

    3.나는 표준이 있다고 생각하지 않는다. 각 웹 환경은 그런 것들을위한 '표준'을 제공합니다. 게다가, URL은 보통 너무 짧습니다 (일부 브라우저에서는 256 바이트 제한). 물론 POST 요청으로 더 긴 배열 / 데이터를 보낼 수 있습니다.

    나는 표준이 있다고 생각하지 않는다. 각 웹 환경은 그런 것들을위한 '표준'을 제공합니다. 게다가, URL은 보통 너무 짧습니다 (일부 브라우저에서는 256 바이트 제한). 물론 POST 요청으로 더 긴 배열 / 데이터를 보낼 수 있습니다.

    그러나 몇 가지 방법이 있습니다.

    "대괄호 방법"은 간단하고 작동하지만 PHP와 배열로 제한됩니다. PHP와 다른 언어로 된 쿼리 문자열 내에서 클래스 나 변수를 전달하는 것과 같은 다른 유형의 변수가 필요한 경우 JSON 메서드를 사용하는 것이 좋습니다.

    PHP의 JSON 메소드 (메소드 2)의 예 :

    $myarray = array(2, 46, 34, "dfg");
    $serialized = json_encode($myarray)
    $data = 'myarray=' . rawurlencode($serialized);
    // Send to page via cURL, header() or other service.
    

    페이지 수신 코드 (PHP) :

    $myarray = json_decode($_GET["myarray"]); // Or $_POST["myarray"] if a post request.
    
  4. ==============================

    4.서블릿에 쿼리 문자열의 배열을 전달하려고하는 사람에게 도움이 될 것이라고 생각합니다. 아래 쿼리 문자열을 테스트하고 req.getgetParameterValues ​​();를 사용하여 배열 값을 가져올 수있었습니다. 방법. 아래는 브라우저를 통과 한 쿼리 문자열입니다.

    서블릿에 쿼리 문자열의 배열을 전달하려고하는 사람에게 도움이 될 것이라고 생각합니다. 아래 쿼리 문자열을 테스트하고 req.getgetParameterValues ​​();를 사용하여 배열 값을 가져올 수있었습니다. 방법. 아래는 브라우저를 통과 한 쿼리 문자열입니다.

    "http://localhost:8080/ServletsTutorials/*.html?myname=abc&initial=xyz&checkbox=a&checkbox=b"
    

    확인란이 여기에있는 매개 변수 배열입니다.

  5. ==============================

    5.http_build_query를 사용하여 PHP의 배열에서 URL 인코딩 된 쿼리 문자열을 생성 할 수 있습니다. 결과 쿼리 문자열은 확장되지만 http_build_query 메소드의 매개 변수로 사용할 고유 한 구분 기호를 결정할 수 있으므로 디코딩의 경우 어떤 구분 기호가 사용되었는지 확인할 수 있습니다. 만약 당신이 선택한 유일한 것이었다면 그것은 배열 쿼리 문자열이 될 것입니다. 그렇지 않으면 정상적인 쿼리 문자열이됩니다.

    http_build_query를 사용하여 PHP의 배열에서 URL 인코딩 된 쿼리 문자열을 생성 할 수 있습니다. 결과 쿼리 문자열은 확장되지만 http_build_query 메소드의 매개 변수로 사용할 고유 한 구분 기호를 결정할 수 있으므로 디코딩의 경우 어떤 구분 기호가 사용되었는지 확인할 수 있습니다. 만약 당신이 선택한 유일한 것이었다면 그것은 배열 쿼리 문자열이 될 것입니다. 그렇지 않으면 정상적인 쿼리 문자열이됩니다.

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

    6.귀하의 질문에 PHP와 Javascript가 언급되어 있지만 태그에는 언급되어 있지 않습니다. 배열을 MVC.Net 액션에 전달하려는 의도로이 질문에 도달했습니다.

    귀하의 질문에 PHP와 Javascript가 언급되어 있지만 태그에는 언급되어 있지 않습니다. 배열을 MVC.Net 액션에 전달하려는 의도로이 질문에 도달했습니다.

    내 질문에 대한 답을 찾았습니다. 예상되는 형식은 여러 매개 변수가 같은 이름을 가진 질문에서 제안한 형식입니다.

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

    7.parse_string 함수를 확인하십시오. http://php.net/manual/en/function.parse-str.php

    parse_string 함수를 확인하십시오. http://php.net/manual/en/function.parse-str.php

    배열을 포함하여 쿼리 문자열에서 모든 변수를 반환합니다.

    php.net의 예제 :

    <?php
    $str = "first=value&arr[]=foo+bar&arr[]=baz";
    parse_str($str);
    echo $first;  // value
    echo $arr[0]; // foo bar
    echo $arr[1]; // baz
    
    parse_str($str, $output);
    echo $output['first'];  // value
    echo $output['arr'][0]; // foo bar
    echo $output['arr'][1]; // baz
    
    ?>
    
  8. from https://stackoverflow.com/questions/6243051/how-to-pass-an-array-within-a-query-string by cc-by-sa and MIT license