• ベストアンサー

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

  • URLとパラメータの区切り文字

    1.URLとパラメータの区切り文字(例えば"?") 2.各パラメータ間の区切り文字(例えば"&") 3.パラメータのキーと値の区切り文字(例えば"=") これらの名前は、何と言うのでしょうか? ("?"より前をURLと書きましたが、"?"以降も含めてURLでしょうか?) あとは、"#"などもありますが、他にはどんなものがあるのでしょう? それらの名前もお教えいただけると幸いです。

  • Perl、区切り文字で配列に格納したい

    LWP::UserAgentでperlスクリプトから別のスクリプトを呼び出して my $val print $res->as_string; で目的の値を取得したんですが値の前半部分にhttpヘッダーが入っており これを撮り省きたいです。 データの内容はバイナリなので$valの中の改行コードを区切り文字として 配列に格納し末尾の配列の値だけ取りだそうと思っています。 それで指定した区切り文字で配列に格納する方法を調べたのですが よくわからず教えていただけないでしょうか? phpでいうところのexplode関数みたいなことがやりたいです。

    • ベストアンサー
    • Perl
  • javascriptでGETパラメータを扱う

    javascript初心者です。 javascriptでURLをGETパラメータとして取得して、その値を HTMLのaタグのリンク先に指定しようとしています。 こんな感じに出来たらいいと思っています。 ↓ <a href="[GETパラメータで取得したURL]">[GETパラメータで取得したURL]</a> GETパラメータの取得は自力で調べて下記のように記述すればできることがわかりましたが、 aタグのリンク先に指定する記述方法が分かりません。 助けてください。 よろしくお願いします。 <script type="text/javascript"> function getUrlVars() { var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for(var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; } </script>

  • jsがphpアクセス時のURL取得

    こんにちは A というサイトにjavascriptを仕込み B というPHPで作られたサイトに A のjavascriptがアクセスしているとします。 このとき、BのPHPがAのサイトURLをjavascriptから取得できるのでしょうか? ※このjavascriptのパラメータとしてAのサイトURLを仕込む、というのは無しです。 ※PHP側が単独で確認できるかどうか?という質問です。

  • javascriptの計算フォームでカンマ区切り

    下記のようなjavascriptの計算フォームで計算結果に3ケタのカンマ区切りと小数点第2位までで切り捨てるようにしたいのですがどのようにすればよろしいでしょうか? 「javascript カンマ区切り」で検索したサイトをいろいろ見てみたのですが全然わかりません。 どなたかご教授お願い致します。 <head> <script language="JavaScript" type="text/JavaScript"> <!-- function Multiplication(form){ var test = form.ans.value = eval(form.num1.value)*eval(form.num2.value); return false; } --> </script> </head> <p>A×B×C=合計</p> <div> <form name="multiplication"> <input type="text" size="6" name="num1"> × <input type="text" size="6" name="num2" onBlur="Multiplication(this.form)"> = <input type="text" size="15" name="ans" class="txtbox">円(税別価格) <input type="reset" value="やり直し"> </form> </div> </body> </html>

  • GETパラメータの内、空文字のクエリを消去したい

    フォームからGETで複数のパラメータを送信するとき、値が空文字のものを表示しないようにすることは可能でしょうか。 たとえば、次のようなフォームを含むform.phpがあるとします。 -------------- <form action="./result.php" method="get"> <input type="text" name="id" size="40"> <input type="text" name="name" size="40"> <input type="text" name="address" size="40"> <input type="text" name="sex" size="40"> <input type="submit" value="送信"><input type="reset" value="リセット"> </form> -------------- このフォームから、 -------------- id:13 name:佐藤太郎 address:東京都新宿区適当1-2-3 sex:男性 -------------- というデータを送信した場合、送信ボタンを押すと ./result.php?id=13&name=佐藤太郎&address=東京都新宿区適当1-2-3&sex=男性 のページに遷移しますが、 -------------- id: name:佐藤太郎 address: sex:男性 -------------- ですと ./result.php?id=&name=佐藤太郎&address=&sex=男性 になります。 このままですとクエリが読みにくいので、 -------------- id: name:佐藤太郎 address: sex:男性 -------------- の場合は ./result.php?name=佐藤太郎&sex=男性 と入力値のあるものだけを表示してそれ以外は消去したいです。 というのも、例としたform.phpではパラメータは4つでしたが、現在作成しているフォームではパラメータが21あり、空文字のものも含むと、遷移後の画面のURLがとても見にくいのです。 このようにパラメータを見やすくするようなjavascriptのコードを教えてください。 jQueryは1.7を使用しています。どうかよろしくお願いいたします。

  • Javascriptで、フォームボタン押下(submit)せず、リンクURLを書き換える

     javascriptで、  1.フォームのテキストボックスに入れられた値を取得し、   例)テキストボックス入力 ; test  2.元々記述されているリンクURLをユーザがクリックした時、   例)元々のリンクURL ; <a href="www.google.co.jo?q= ~...  3."1"のテキストボックス内に記述された値を取得して、"2"のURLを書き換え、   例)テキストボックス内の文字をURLの一部に追記する ; <a href="www.google.co.jo?q=test  ~...  4.書き換えられた後のURLにユーザを飛ばす、  ・・・という事って出来るんでしょうか。  上記動作内でユーザの動作は、   テキストボックスに文字を入れる、という動作と、   リンクをクリックする、という動作のみです。  フォームのボタン押下後、というのであれば出来たんですが、上記の様な動作のコードが思い浮かびません・・・。PHPとかCGIではなく、Javascriptで何とか出来ないでしょうか。  お知恵拝借、よろしくお願いします。

  • formのsubmitごとのパラメータ追加について

    phpで作成されており、入力、入力内容確認、完了ごとのファイルを includeされて、ステップの変数にPOSTで値を渡し、ファイルを読み替え、見た目上は1つのファイル(URL)として動いております。 最後の完了画面のみURLを変えてほしいとのことでしたが、 完了画面への分岐が修正する・送信するのボタンですが、 両方submitのため、入力内容確認画面のform送信先にパラメータを付加してみても、 修正ボタンを押したときにもURLにパラメータが付加されています。 location.search = '?mode=send';などを使ってみましたが、完了画面時にリロードされてしまい、メールは来ますが、画面上は入力前の画面に戻ってしまいます。 submitボタン自体にパラメータを不可するか、location.search動作時のリロード後にお問い合わせ完了画面を強制的に出すしか思いつかないに加え、その動作をするプログラムも思いつきません。 知恵を是非貸してください。 よろしくお願いいたします。 現状のソースは、 <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post" id="mailform"> インプットやセレクト <a href="javascript:document.getElementById('step').value='Step3';document.getElementById('mailform').submit();"> 修正する </a> <a href="javascript:document.getElementById('mailform').submit();"> 送信する </a> といったものです。 PHP,javascriptでの対応を希望です。よろしくお願いいたします。

  • 画像処理での文字の処理について

    formのtextareaから文字を受け取り、その文字を画像に書き込むプログラムを作成しています。 処理手順は、 1.[a.php]にあるtextareaに文字を入力   <textarea name="intxt" rows="10" cols="30"></textarea> (FORMのmethodはPOST)    2.submitで値を送信し、[b.php]で処理   [a.php]:print "<img border='0' src='b.php?imgfile=$imgfile&txt=$txt'>";      [b.php]:$imgfile=$_GET['imgfile'];/*画像*/        $txt=$_GET['txt'];    /*入力文字*/        文字を画像に書き込むときに、  aaa  bbb という風に画像に書き込みたいのですが、処理をすると  aaabbb  となります。 そこで私が考えた方法は、改行コードで文字列を切り取り、【 $text=explode("\n",$txt); 】 for文で書き込むという方法でしているのですが、うまく文字列を切り取れません。 改行コードが間違っているのでしょうか? それとも、改行コードでは切り取れないのでしょうか? 検索をかけてみたり、他の質問を見てみたのですが、うまく出来ませんでした。 それと、日本語で文字列を渡すためにはどのような関数を使えばよいのでしょうか? マルチバイト文字列はrawurlencode()を噛まさねば渡すことが出来ないというのはわかったのですが、 どういう風に噛ませるのかわかりません。 いろいろと試したのですが、表示されませんでした。 他にも方法があるのでしょうか? 開発環境は、PHP5.2.5、Apache2.2、WindowsXPです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • JavaScript変数をPHPへ渡す

    JavaScriptで取得した変数を、PHP側で取得できるでしょうか? ある入力フォームのテキストボックスに値を入力後、別のウィンドウ(windowopen)を開き 先の入力したテキストの値を利用して条件を抽出させ、 結果を入力フォームに戻したいのですが・・・

    • ベストアンサー
    • PHP

専門家に質問してみよう