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';
아주 간단한 해결책이 있습니다 : 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"
http_build_query()필요한 모든 이스케이프 ( %5B=> [및 %5D=> ])를 처리하므로이 문자열은 aParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d.
편집 : 매우 편리한 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('&', array_map('urlify', array_keys($aValues), $aValues));
가장 쉬운 방법은 serialize기능 을 사용하는 것입니다.
저장 또는 전송을 위해 모든 변수를 직렬화합니다. PHP 매뉴얼 에서 읽을 수 있습니다 -직렬화
변수는 다음을 사용하여 복원 할 수 있습니다. unserialize
따라서 URL을 전달할 때 다음을 사용합니다.
$url = urlencode(serialize($array))
사용하는 변수를 복원하려면
$var = unserialize(urldecode($_GET['array']))
그래도 여기서 조심하십시오. GET 요청의 최대 크기는 4k로 제한되며 URL에서 배열을 전달하여 쉽게 초과 할 수 있습니다.
또한 데이터를 전달하는 가장 안전한 방법은 아닙니다! 대신 세션을 사용하는 것이 좋습니다.
( urlencode)를 출력 할 때 변수를 이스케이프하십시오 .
배열 만 인쇄 할 수는 없습니다. 어떤 식 으로든 루프를 사용하여 URL을 만들어야합니다.
$url = 'http://example.com/index.php?'
$first = true;
foreach($aValues as $key => $value) {
if(!$first) $url .= '&';
else $first = false;
$url .= 'aValues['.urlencode($key).']='.urlencode($value);
}
<?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 . "\n";제공 a:4:{s:1:"a";s:8:"Thusitha";s:1:"b";s:10:"Sumanadasa";s:1:"c";s:6:"Lakmal";s:1:"d";s:11:"Nanayakkara";}하고
print $strenc . "\n"; 준다
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
그래서 당신이 전달하려는 경우 $array에 URL을 통해 page_no_2.php,
ex:-
$url ='http://page_no_2.php?data=".$strenc."';
To return back to the original array, it needs to be urldecode(), then unserialize(), like this in page_no_2.php:
<?php
$strenc2= $_GET['data'];
$arr = unserialize(urldecode($strenc2));
var_dump($arr);
?>
gives
array(4) {
["a"]=>
string(8) "Thusitha"
["b"]=>
string(10) "Sumanadasa"
["c"]=>
string(6) "Lakmal"
["d"]=>
string(11) "Nanayakkara"
}
again :D
I do this with serialized data base64 encoded. Best and smallest way, i guess. urlencode is to much wasting space and you have only 4k.
- why: http://mizine.de/html/array-ueber-get-url-parameter-uebergeben/
- how: https://gist.github.com/vdite/79919fa33a3e4fbf505c
This isn't a direct answer as this has already been answered, but everyone was talking about sending the data, but nobody really said what you do when it gets there, and it took me a good half an hour to work it out. So I thought I would help out here.
I will repeat this bit
$data = array(
'cat' => 'moggy',
'dog' => 'mutt'
);
$query = http_build_query(array('mydata' => $data));
$query=urlencode($query);
Obviously you would format it better than this www.someurl.com?x=$query
And to get the data back
parse_str($_GET['x']);
echo $mydata['dog'];
echo $mydata['cat'];
**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'];
참고URL : https://stackoverflow.com/questions/1763508/passing-arrays-as-url-parameter
'Programing' 카테고리의 다른 글
| 인덱싱에서 Xcode가 멈춤 (0) | 2020.08.11 |
|---|---|
| Tomcat 8 던지기-org.apache.catalina.webresources.Cache.getResource 리소스를 추가 할 수 없습니다. (0) | 2020.08.11 |
| 'Hello world'는 어디에서 왔나요? (0) | 2020.08.10 |
| 기본 클래스의 멤버에 액세스 (0) | 2020.08.10 |
| Vim에서 여러 줄 정규식 지원 (0) | 2020.08.10 |