2011-01-16 14 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 

どうすれば修正できますか?私は'xxx.php?category=contacts'のようなものを渡して、'contacts'か何かを変数に入れなければなりません。

ありがとうございました。

答えて

8

関数parse_strは、URL全体ではなく、クエリ文字列のみを解析します。 parse_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

また、2番目のパラメータを使用して、クエリ文字列からパラメータを保存します。この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第2引数を使用してデータを配列に格納することを検討してください。

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()を機能させます。

関連する問題