
PHP5.1.6を使用しています。
POSTで以下のようにnameの値に半角スペースを含め
<input type="hidden" name="p o s t" value="p o s t">
以下のようにデータを受け取って表示させると
foreach($_POST as $k=>$v){
print $k."=".$v."<br>\n";
}
p_o_s_t=p o s t
と表示されます。nameに半角スペースが含まれると強制的にアンダースコアに変換されているように思われます。valueの方は半角スペースのまま表示されます。
これはPHPの仕様なのでしょうか。Perlではこのようなことはないようです。
この点について詳しい情報をお持ちの方はお教えいただきたく思います。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
変数名には空白や記号は使えませんが一般の配列のキーには使えます
ただ$_POSTや$_GET等の配列は特殊で配列のキーはregister globalsの設定によっては変数名としても使われるので変数名と同じと考えた方がよいでしょう。
"."(ドット、ピリオド)に関してはマニュアルに"_"に変換されることが明記されていますがその他については記載がありません。
ただ空白や単独の"["も"_"に変換されるようです。
http://jp.php.net/manual/ja/language.variables.e …
この回答への補足
ドットについての記載を確認できました。ありがとうございます。
"重要なことを記述しておくと、このため、外部変数に含まれるドットを PHP は自動的にアンダースコアに変換します。"
その下にあるUser Contributed Notesに以下の記載を見つけました。
The full list of field-name characters that PHP converts to _ (underscore) is the following (not just dot):
chr(32) ( ) (space)
chr(46) (.) (dot)
chr(91) ([) (open square bracket)
chr(128) - chr(159) (various)
最後のchr(128)-chr(153)の意味が不明ですが、やはり、半角スペース、ドット、単独の"["がアンダースコアに変換されるとあります。私が実際にテストして試したところではこれら以外に「タブ」がアンダースコアに変換されました。因みに、以下の特殊文字は変換さずそのまま表示されることを確認しました。
「;」「:」「/」「?」「,」「&」「%」「*」「<」「>」「]」「{」など
Perlで同じテストをして確認したところでは、スペース、ドット、タブ、「[」も含めてどの文字もアンダースコアに変換されることはなく、そのまま表示されました。
No.2
- 回答日時:
>これはPHPの仕様なのでしょうか。
変数名などのラベルの形式についてはマニュアルに記載があります。
http://www.php.net/manual/ja/language.variables. …
>キーの部分に変数を代入して利用したいためです。
代入するとしても、空白(やピリオド)があったらマズイのですから、適宜チェックして(必要であれば変換して)代入するのがスジです。
アドバイスありがとうございます。
マニュアル詳しく調べてみます。
>代入するとしても、空白(やピリオド)があったらマズイのですから、適宜チェックして(必要であれば変換して)代入するのがスジです。
使用文字の制限と置換で対処しようと思います。
No.1
- 回答日時:
変数名や、連想配列のキー名に、スペースは許可されていません。
というか、配列名や連想配列のキー名にスペースがなぜ必要?
この回答への補足
早々とご回答いただきありがとうございます。
>変数名や、連想配列のキー名に、スペースは許可されていません。
連想配列のキーに許可されていない文字について詳しく書かれているサイトをご存知でしたら教えていただけませんでしょうか。
先の例では半角のドット「.」も以下のようにアンダースコアに変換されます。
<input type="hidden" name="p.o.s.t" value="p.o.s.t">
→p_o_s_t=p.o.s.t
>というか、配列名や連想配列のキー名にスペースがなぜ必要?
キーの部分に変数を代入して利用したいためです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
$_SESSIONに二次元配列を使える...
-
AppStoreのランキングを配列に...
-
PHPにてクラスを配列にすること...
-
配列をループでたくさん宣言し...
-
String だと「 ByRef引数の型が...
-
配列をMySQLの1カラムに入れ、...
-
URLのサブドメインとドメイン部...
-
配列を回すとき、最後の要素だ...
-
PHPのPOSTでの半角スペース
-
Smarty の演算方法
-
ファイルから指定行数分だけ読...
-
multiple属性のPOSTを配列で受...
-
mb_ereg_replaceについて
-
Smartyのテンプレートからjavas...
-
チェックボックスが複数選択で...
-
SimpleXML関数で取得したXML要...
-
配列のbindValue方法について
-
URLエンコードした配列を使う方法
-
file_existsでファイル名の部分...
-
ネストが深い時のforeachはどう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
$_SESSIONに二次元配列を使える...
-
foreachのなかで次のキーを参照...
-
file_existsでファイル名の部分...
-
PHPにてクラスを配列にすること...
-
String だと「 ByRef引数の型が...
-
ネストが深い時のforeachはどう...
-
postgresql関数をつかったレコ...
-
PHPでの簡易ビンゴゲームでの疑...
-
PHPのカッコ[ ]の使い方について
-
sortableで並べ替えてDBに保...
-
漢字のソートについて
-
プルダウンメニューでCSVデータ...
-
チェックボックス複数選択 mys...
-
PHPで配列をPOSTデータで送った...
-
URLのサブドメインとドメイン部...
-
PHP 配列の添字に変数は使えない?
-
チェックボックスが複数選択で...
-
PHP 多次元配列変数のデータ受...
-
SQL文の実行結果を変数で受けて...
おすすめ情報