2010-05-28 5 views
1

어이, 나는 입력 요소에서이 경로 이름이 나의 PHP var에있는 끈으로있다. 지금은 어떻게 든 (정규 표현식 또는 폭발()) 그것을 변환해야합니다 : $_POST['interesse']['angebote']['flurfuerderfahrzeuge'] 및 값을 얻으려면 eval() 사용하십시오. 그러나 훨씬 쉬운 방법이 있어야한다고 확신합니다. 아이디어가 있으십니까? 감사!html 배열 경로를 가진 배열을 얻으십시오

+0

평가를 입력 요소에? 그건 혼란을 요구하고있어, 친구. 그것은 혼돈을 요구하고 있습니다. – webbiedave

답변

2

eval()은 evil()입니다. 이 경우에는 더 빨리 피할 수있는 옵션이 있습니다. 당신의 입력 문자열이 경로를 포함뿐만 아니라 경우

$name = '$' . preg_replace("/\[([^\]]+)\]/", '["$1"]', $path); 

,뿐만 아니라, 값이 (당신이해야하는 경우 더미 값을 연결) : 당신은 그냥 구문을 변환 할 경우

, 그때 정규식이 당신은 단지 실제 PHP 배열로 배열 이름을 추출하는 parse_str()를 사용할 수 있습니다

$path = "whatever[subname][deepnesting]=1"; 
    parse_str($path, $as_var); 
    print_r($as_var); 

는 입력 데이터에 대한 자세한 것을 알려주십시오.


좋아요, 무슨 뜻인지 알았습니다. $ _POST 배열에 잠긴다. 다음과 같이 단계별 참조를 사용

$path = "xxxx[yyyy][zzzz]"; 
$ref = & $_POST; 

preg_match_all("/\w+/", $path, $uu); 
foreach ($uu[0] as $subname) { 
    $ref = & $ref[$subname]; 
} 

print_r($ref); // = $_POST[xxxx][yyyy][zzzz] 
+0

아니오 입력이 없다면이 해킹이 무의미 할 것입니다. – antpaw

+0

굉장하고 우아한 해결책, 고마워. 왜 참조를 사용했는지 확신 할 수 없습니다. – antpaw

0

확인 나는 간단한을 알고 있지만 내가 내가 지금 무엇을 사용 이잖아, 그래서 추한 외모 :

$path = 'interesse[angebote][flurfuerderfahrzeuge]'; 
    $post_var = '$_POST['.str_replace(']]', ']', str_replace('[', '][', $path)); 
    eval('$value = '.$post_var.';'); 
    echo $value; 
+0

"interesse [angebote] [flurfuerderfahrzeuge]를 지나가는 누군가 걱정해야합니다. unlink ("somefile"); ' – webbiedave

+0

하하 나는 결코 게시물 데이터를 파싱하지 않을 것이다 : D. $ path var은 나에 의해 하드 코드되어있다. – antpaw

+1

나는 본다. 나는 '입력 요소로부터이 경로 이름을 가졌다'는 것을 읽고 그것을 입력으로 가정했다. – webbiedave

관련 문제