• ベストアンサー

javascriptで区切り文字

お世話になります。 ただ今javascript+PHPで開発しております。 FORMの値をjavascriptで取得し、遷移先URL+パラメータ部を作成しPHPに渡しております。 そこで今”&”を入力された場合に困っております。 FORMの値で&と言うのが入力されていたら &が別のパラメータとして認識されてしまうのです。 そこで適当な区切り文字でパラメータ部を作成し PHP側でexplodeしようと思っているのですが どういう区切り文字が適当なのでしょうか? 申し訳ありませんが、ご教授宜しくお願い致します。 formの値 a[]=1 a[]=2 a[]=& a[]=4 javascriptで作成したURL例 http://hoge.php?a[]=1&a[]=2&a[]=&&a[]=4 PHPで受け取り。 $data = _POST['a'] $dataの中身 a=1,a=2,a=4 3番目に入力された&が取得できていない。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

encodeURIComponent() decodeURIComponent() IE5.5以上、Netscape6.0以上、FirefoxやOpera7以上で使えると思います。 日本語(全角文字)が入っていなければescape()でも良いと思います。 .(ピリオド)や_(アンダーバー)など、一部の記号はescape()、encodeURI()、encodeURIComponent()のいずれでも変換されません > そこで適当な区切り文字でパラメータ部を作成し > PHP側でexplodeしようと思っているのですが > どういう区切り文字が適当なのでしょうか? 入力出来ない文字にするとか、 それ以外の文字が適正にエスケープやエンコードしてあれば何でも良いと思います。 フォームエレメントの区切り文字は&ですし、キーと値の区切りは=(HTMLやCGIの仕様より) テキストなら,(コンマ)や\t(タブ)が一般的ですね。

bakenshibakenshi
質問者

お礼

taloo様、ご教授有難うございます。 javascriptでencodeURIComponentし、 PHPでデコード(urldecode?)を試してみたいと思います。 記載するのを忘れたのですが 対応ブラウザはIEとFirefoxとSafariです。 あとフォームはユーザーに入力されるので日本語も渡されます。 有難うございました。

その他の回答 (2)

  • NTJ
  • ベストアンサー率44% (46/103)
回答No.3

・・・思うに・・・ FORMをGETからPOSTへ変更するだけで充分なような気がするのですが・・・ POSTにすると、なにか不味い事があるのでしょうか?

  • gaku1
  • ベストアンサー率71% (10/14)
回答No.1

問題は,PHPの_POSTに依存しているために起きていると思います。私は,その部分をPHP側で回避する方法を知らないので,JavaScript側でsubmitで送らずに,送信用の関数を用意しておき,あれこれの値を文字列変数に格納したのちに(必要であれば漢字コードを統一したうえで)  base64エンコードしてクッキーに格納し送信しています。クッキーはブラウザによって最大サイズが異なるようなので,そこは注意が必要です。  上に書いた方法は確かに動作しますが,スクリプトを書く身には「うっとおしい」です。私自身も,もっとよい方法が知りたいです。

bakenshibakenshi
質問者

お礼

gaku1様、ご教授有難うございます。 クッキーに格納ですか。。。 やはりjavascriptでURLを作成するのは面倒なんですね。

関連するQ&A