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

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

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

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

Q&A

解決済

2回答

2937閲覧

http://hoge.com/seihin.php?check[]=1で[]が%5b%5dとなっても正しく動作する理由

moitaro

総合スコア443

PHP

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

0グッド

0クリップ

投稿2018/09/26 02:11

お世話になっております。

昨日
https://teratail.com/questions/148337
でPHPでは[]で複数渡せると伺って実装したのですが
気になる事があるため失礼します。

件名の通りなのですが
http://hoge.com/seihin.php?check[]=1
でも正しくphpに渡り
http://hoge.com/seihin.php?check%5b%5d=1
でも正しく渡ります。

phpに渡った際に%5b%5dが[]と変換されていると思っているのですが
これはサーバーが変換しているのでしょうか?
それともブラウザが変換しているのでしょうか?

特に気にしなくても良い気がしますが
問い合わせがあった時に勉強不足を晒したくないため
質問失礼します。

何かご存知な方はお教え頂けますと幸いです。

以上 お問い合わせいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

phpに渡った際に%5b%5dが[]と変換されていると思っているのですが

PHPが変換しています。
http://jp2.php.net/manual/ja/reserved.variables.get.php
に、

注意: GET 変数は urldecode() 関数を介して渡されます。

という記述があります。

投稿2018/09/26 02:36

otn

総合スコア84533

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

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

moitaro

2018/09/26 02:38

素早いご返答本当にありがとうございます。 これでツッコミがあってもにこやかに回答できます。 本当に助かりました。重ねて御礼申し上げます。
yambejp

2018/09/26 02:44

基本的には送る側で変換されているようです
otn

2018/09/26 03:16

%5b%5d⇒[] の変換についての質問であり、[]⇒%5b%5dの変換についての質問ではないという理解で合っていますか? ブラウザとか書いてあるので、念のため確認です。
moitaro

2018/09/26 03:33

はい。合っています。 %5b%5d⇒[] はPHPで変換しているとの情報 ありがとうございました。
guest

0

URLで利用できる文字は、RFC2396とRFC3986で定義されており
実は「[」や「]」は使えない文字なのです。
なので基本的に送る際にはブラウザが解釈してエンコードしてくれます。
しかし、実際にそのまま送ってもhttpdが受け取らないわけではないので
サーバー側の言語がそのまま解釈してくれます

PHP

1<form> 2<input type="checkbox" name="check[]" value="1">1<br> 3<input type="checkbox" name="check[]" value="2">2<br> 4<input type="checkbox" name="check[]" value="3">3<br> 5<input type="submit" value="go"> 6</form> 7 8<a href="?check%5b%5d=4">4</a><br> 9<a href="?check[]=5">5</a><br> 10<hr> 11<?PHP 12print $_SERVER["QUERY_STRING"]."<br>"; 13print_r(@$_GET["check"]); 14?>

上記、フォームでサブミットした場合QUERY_STRINGは%5b%5dで受けています
したがってリンクでいうと4のような動きをしているわけです。
ところがダイレクトに[]を書いた5のようなものでも支障なく動きます。
これは保証された動きではないので極力避けたほうがよいですが、
いまのhttpdではほぼ問題なく動くので万が一この表記をしても動作する可能性は高いです。

投稿2018/09/26 02:40

yambejp

総合スコア114814

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

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

moitaro

2018/09/26 02:50

yambejp様 コメントありがとうございます。 []で書いたものは極力避けた方が良いのですね…… でも%5b%5dで表記するより[]で表記してあった方が分かりやすいので悩みどころですね……(+_+) コメントありがとうございました。
yambejp

2018/09/26 02:59

> []で書いたものは極力避けた方が良い あくまでもリンクで書くときのはなしです その他エンコードが必要なものはきっちり手書きでエンコードします <a href="?check%5b%5d=1&amp;check%5b%5d=2">1&amp;2</a><br>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問