質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

3304閲覧

”http_build_query”以外のWeb APIへのプログラミング

yutarou2000

総合スコア15

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2016/02/02 10:54

Web APIに関連したプログラミングを行っています。

$params = array(
'id' => 'ID',
'pw' => 'パスワード',
'code' => '00',








);

$api = 'https://・・・・';
$ch = curl_init($api);
curl_setopt_array($ch, array(
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => http_build_query($params, '', '&'),
));

$result = curl_exec($ch);
curl_close($ch);

//出力結果
echo htmlspecialchars(
print_r(new SimpleXMLElement($result), true)
) ;

この書き方で、まずは一定の期待する結果を得られました。

ところが、
$params = array(
'id' => 'ユニークID',
'pw' => 'パスワード',
'code' => '00',




'hairetu[0]' => 'aaa',
'hairetu[1]' => 'bbb',
'hairetu[2]' => 'ccc',



);

このように、「$params」に配列がある場合、期待する実行結果が得られません。
「http_build_query」という関数が ”[0]”→”%5B0%5D ”とURLエンコードしてしまうからのようです。

ではこの場合、「http_build_query」を使わずにどのように記述すればよいのでしょうか?
どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

RFC3986に従えば'[', ']'はqueryに含めてはいけない文字だからエスケープすべきということで、PHP 5.1.3からエスケープされるように修正されたという経緯があります。

PHPのリリースノート
修正の元になったバグ

従って普通はそのままでいいはずですが、相手のサーバがそれだと受け付けてくれない等の事情があるのなら、自分で書くしかないでしょうね。キーにエスケープする文字が他にないと仮定してよければこんな感じで。

PHP

1function my_http_build_query($data) { 2 return 3 implode('&', 4 array_map( 5 function ($key, $value) { return $key.'='.rawurlencode($value); }, 6 array_keys($data), 7 array_values($data) 8 ) 9 ); 10}

投稿2016/02/03 00:57

crhg

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yutarou2000

2016/02/03 03:06

ご回答、ありがとうございます。 上記のコードが直接の答えとはならなかったのですが、上記のコードを試して(仕様書には書いていない)サーバの仕様がわかり、解決の糸口となりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問