2011-01-16 10 views
1

이유는 예를 들어 'form.php?'와 같은 뭔가로 문자열을 통과 할 때 나는 오류가 난이 얻을 parse_str이 작동하지 않습니까?

parse_str('form.php?category=contacts'); 
echo $category; 

,

Notice: Undefined variable: category in C:\wamp\www\1hundred_2011_MVC\applications\CMS\category_manage.php on line xx 

하지만,

parse_str('category=contacts'); 
echo $category; 

내가 원하는 것을 얻습니다.

contacts 

어떻게 해결할 수 있습니까? 변수에 'contacts' 또는 뭔가를 얻기 위해 'xxx.php?category=contacts'과 같은 것을 전달해야합니다.

감사합니다.

답변

8

함수 parse_str은 전체 URL이 아닌 쿼리 문자열 만 구문 분석합니다. 을 사용하여 PHP_URL_QUERY으로 설정된 구성 요소를 사용하여 쿼리 문자열을 먼저 추출한 다음 parse_str을 사용하십시오.

$url_query = parse_url('form.php?category=contacts', PHP_URL_QUERY); 
parse_str($url_query, $output); 
echo $output['category']; 

결과 :

 
contacts 

See it at ideone.

+0

바로 내 손에서 단어를 가져갔습니다. –

+0

또한 두 번째 매개 변수를 사용하여 쿼리 문자열의 매개 변수를 저장합니다.이 PHP.net 항목 [http://www.php.net/manual/en/]에서 언급 한 것처럼 변수를 덮어 쓰지 않으려합니다. function.parse-str.php # 96035]를 참조하십시오. –

+0

@ Yzmir Ramirez :이 접근법을 보여주기 위해 제 대답을 업데이트했습니다. 감사. –

1

parse_str 만 받아 쿼리 문자열 :

$q = 'foo?hello=world'; 
parse_str($q); 
echo ${'foo?hello'}; // outputs 'world' 

스트립 먼저 URL의 시작 :

$q = 'foo?hello=world'; 
parse_str(substr($q, strpos($q, '?')+1); 
echo $hello; // outputs 'world' 

대신 로컬 변수를 덮어 쓰지 않으려면 parse_str 두 번째 인수를 사용하여 데이터를 배열에 포함하는 것이 좋습니다.

0

당신과 같이 추출 된 변수를 URLDECODE를 사용 플러스 반환 할 수 있습니다 또한

... some helper class... 
/** 
* Return parsed serialized JQuery object as PHP array of extracted variables 
*/ 
protected static function parseFields($encoded){ 
    parse_str(urldecode($encoded)); 
    unset($encoded); 
    return get_defined_vars(); 
} 

, 당신은 URL 인코딩 된 문자열을 만들기위한 "$의 .PARAM (데이터)"JQuery와 기능을 이용 할 수 있습니다 :

var encoded=$.param(fields); 

그리고 서버에 AJAX/POST 요청을 통해 제출하여 parseFields() 함수를 호출하십시오.

관련 문제