URLに付く [] を外したい

このQ&Aのポイント
  • 現在稼働中のWebシステムの保守を担当しています。お客様からの依頼で、URLに付いている [] を削除したいですが、方法が分からず困っています。
  • フォームを送信すると、URLが xxx.php?aaa[]=1,2,3&bbb[]=1,2,3 のように表示されます。このURLを xxx/aaa/1,2,3/bbb/1,2,3/ に変更したいです。
  • [ ] を削除する理由は、広告登録フォームでURLがエラーになるためです。URLエンコードでは問題が解決せず、カンマ区切りも望ましくありません。xxx/aaa/1,2,3/bbb/1,2,3/ の形が望ましいです。
回答を見る
  • ベストアンサー

URLに付く [ ] を外したい

現在稼働中のWebシステムの保守を担当しています。 先日、お客様から「URLに付いている [ ] を消して欲しい」との依頼がありましたが、 やり方が分からず、困っております。 現在、 xxx/aaa[]/1,2,3/bbb[]/1,2,3/ このようになっているURLを xxx/aaa/1,2,3/bbb/1,2,3/ に変更したいという依頼です。 現在、以下のようなフォームがあり <form action="xxx.php" method="GET"> <input type="checkbox" name="aaa[]" value="1"> <input type="checkbox" name="aaa[]" value="2"> <input type="checkbox" name="aaa[]" value="3"> <input type="checkbox" name="bbb[]" value="1"> <input type="checkbox" name="bbb[]" value="2"> <input type="checkbox" name="bbb[]" value="3"> </form> このフォームを送信するとURLは以下のようになりますが、 xxx.php?aaa[]=1,2,3&bbb[]=1,2,3 これを .htaccess で xxx/aaa[]/1,2,3/bbb[]/1,2,3/ というように書き換えています。 このURLを、 xxx/aaa/1,2,3/bbb/1,2,3/ に変更することはできますでしょうか? html、.htaccess、php、どの部分が改修になっても構いません。 [ ] を削除したいという理由としては、 インターネットの広告を出すときに、広告登録フォームでURLがエラーになるから、ということでした。 広告登録フォームでURLがエラーにならなければ良いのかと思い、 xxx/aaa%5b%5d/1,2,3/bbb%5b%5d/1,2,3/ というように [ ] の部分をURLエンコードする方法をお伝えしましたが、%が付くのもダメということでした。 xxx/aaa_0/1/aaa_1/2/aaa_2/3/bbb_0/1/bbb_1/2/bbb_2/3/ というように カンマ区切りじゃなくなるのも嫌だそうです。 あくまで xxx/aaa/1,2,3/bbb/1,2,3/ の形が良いとのことでした。

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

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

>このフォームを送信するとURLは以下のようになりますが、 >xxx.php?aaa[]=1,2,3&bbb[]=1,2,3 HTMLの文法上は、そうなりません。 aaa[]=1&aaa[]=2&aaa[]=3&bbb[]=1&bbb[]=2&bbb[]=3 となるはずです。 もしaaa[]=1,2,3などとなっているのであれば、JavaScriptで送信データを生成しているはずですから、 そのプログラムでaaa/1,2,3となるように書き換えれば良いと思います。 -------------------- >あくまで >xxx/aaa/1,2,3/bbb/1,2,3/ >の形が良いとのことでした。 いずれにしてもこの形式で「送信」するには、JavaScriptでデータを生成しないとダメだと思います。 サーバーで受信してからの話であればPHPで$_GET["aaa"][0]、$_GET["aaa"][1]を結合し直せば良いでしょうけど、 ただの二度手間じゃないですかね。

saorix0
質問者

お礼

> aaa[]=1&aaa[]=2&aaa[]=3&bbb[]=1&bbb[]=2&bbb[]=3 > となるはずです。 確かに、サンプルのformを送信してみたら、 urlは回答いただいたものになりました。 aaa[]/1,2,3のように書き換えているところを探したら、 JavaScriptではなかったですが、 phpでリダイレクトさせている箇所を見つけました。 その部分をaaa/1,2,3に変更し、 あとはexplode(",", $_GET["aaa"])で修正前と同じ配列に戻して対応しました。 重要なヒントになりました。ありがとうございました。

その他の回答 (2)

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.2

>弊社では、今稼動しているソースを頼りに、カスタマイズなどの保守を行っています。 そういう事でしたら、[]を削除して問題ないかまずはソースを解析して調べるしかないのではないでしょうか。 何となく"[]"の有無でチェックボックスかどうかの判断をしてそうな気はしますけど。

saorix0
質問者

お礼

ありがとうございます。 "[]"の有無でチェックボックスかどうかの判断…ではなかったですが、 受け取った値が配列だったらURLを書き換えてリダイレクトするという処理を見つけました。

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

[]を消すことによって、そのwebシステムにどういう影響があるのか消していいものなのかどうかわかるのは、そのwebシステムを構築した業者だと思いますので、たずねるならそのwebシステムを構築した業者ではないでしょうか?

saorix0
質問者

お礼

ありがとうございます。 Webシステムを構築した業者はどこだか分かりません。 倒産したのかなどの詳しい話は分かりませんが、 こういった内部仕様が分かる資料やそれを知っている人もいないようです。 弊社では、今稼動しているソースを頼りに、カスタマイズなどの保守を行っています。 ちなみに、 <input type="checkbox" name="aaa[]" value="1"> <input type="checkbox" name="aaa[]" value="2"> <input type="checkbox" name="aaa[]" value="3"> の部分を <input type="checkbox" name="aaa" value="1"> <input type="checkbox" name="aaa" value="2"> <input type="checkbox" name="aaa" value="3"> として、 チェックボックスすべてにチェックを付けて送信しても、 URLは xxx.php?aaa=1&aaa=2&aaa=3&bbb=1&bbb=2&bbb=3 となるはずだと思いますが .htaccess で書き換えられた結果は xxx/aaa/3/bbb/3/ となってしまいます。

関連するQ&A

  • PHPで動的URLを静的URLに変換するには

    PHPで動的URLを静的URLに変換するやり方を教えてください。 <form method="GET" action="aaa/bbb"> <input type="checkbox" name="ad" value="0"> <input type="checkbox" name="ad" value="1"> <input type="checkbox" name="ad" value="2"> <input type="checkbox" name="sb" value="0"> <input type="checkbox" name="sb" value="1"> <input type="checkbox" name="sb" value="2"> <input type="submit" value="送信"> </form> 上記のフォームからチェックボックスを複数選択してsubmitしたとき、 ブラウザのURLはhttp://www.hogehoge.com/aaa/bbb?ad=1&sb=2 となっていたとします、 これをhttp://www.hogehoge.com/aaa/bbb/1/2 と書き換えるにはどんなPHPスクリプトを書けばよいのでしょうか? 実際はもっとチェックボックスの数が多いので、 mod_rewrite は不向きのように思います。 そうすると、path_info を使うのが良いと思うのですが、 具体的にどのようにコーディングすればいいか分かりません。 お手数ですが、回答をお願いいたします。

    • ベストアンサー
    • PHP
  • phpでのメールフォームの作成について

    HTMLで <form action="mail.php" method="post"> <input name="aaa" type="checkbox" id="aaa" value="AAA" checked> <input name="bbb" type="checkbox" id="bbb" value="BBB" checked> <input name="ccc" type="checkbox" id="ccc" value="CCC" checked> </form> として、次に進むボタンを押すとmail.phpに飛び mail.phpでは、チェックされたものだけを表示したいのですが、どうすればよいでしょうか? もし、AAAとBBBが選ばれたら あなたが選んだのは AAA、BBBです。 と表示したいです。そのあとにメールフォームを続けるつもりです。 ご教授よろしくお願いします。

    • 締切済み
    • PHP
  • checkboxクリックされていないidを取得

    <form id="chkform"> <input type="checkbox" name="check" value="aaa" id="aaa">aaa <input type="checkbox" name="check" value="bbb" id="bbb">bbb <input type="checkbox" name="check" value="ccc" id="ccc">ccc                   ・                   ・                    ・ <input type="checkbox" name="check" value="zzz" id="zzz">zzz </form> チェックボックスの複数の項目の内、チェックされていない全てのIDを取得する方法を教えてください。 よろしくお願いいたします。

  • フォームタグをURLに

    フォームタグは「http://aaa.php?aaa=aaa&bbb=bbb」等で基本的にURLに変換することが出来ますが、例えば<form id="form1" name="form1" method="post" action="xxx.php?PHPSESSID=xxx"> 等の様にformタグ内に一切<input>がない場合はどの様にURLで表示させる事が出来るのでしょうか? 詳しいかたがいらっしゃいましたらご教示願います。

  • チェックボックスのvalueを連結してURLに追加

    <form method="get" action="<?php = $_SERVER['PHP_SELF']; ?>"> <input type="checkbox" name="c" value="001" /> <input type="checkbox" name="c" value="002" /> <input type="checkbox" name="c" value="003" /> <input type="checkbox" name="c" value="004" /> <input type="checkbox" name="c" value="005" /> <input type="submit" value="送信" /> </form> submitするとURLに ?c=001&c=002&c=003… が追加されます。 その形ではなく、c=001002003… と連結してURLに追加するにはどうしたら良いですか?

    • 締切済み
    • PHP
  • chromeでフォームの値が取得できない

    PHPでフォームに入力された値を取得して画面に表示させる処理において、 Javascriptでフォームの値を変更した場合、chromeだと変更後の値が 取得できません。 例えば、 <form name="form" method="post" action="index.php"> <input type="checkbox" name="chk1" value="111"> <input type="hidden" name="data1" value="AAA"> <input type="submit" value="送信"> </form> というようなフォームがあったとして、Javascriptで値を <form name="form" method="post" action="index.php"> <input type="checkbox" name="chk1" value="222"> <input type="hidden" name="data1" value="BBB"> <input type="submit" value="送信"> </form> と、変更しても送信ボタンを押して取得できる値は、上の方の値になります。 IEやFireFoxでは問題なく変更後の値が取得できるのですが、chromeだと 取得できません。 なにか解決方法があるのか、それともchromeの仕様なのかご教示いただければと 思います。 どうかよろしくお願いいたします。

  • PHPバージョン4.3.10で動作しない

    はじめのページでチェックボックスにチェックしてもらい、 次のページでそのチェックしたものを表示したいです。 しかし、下記のコードではPHPバージョン4.3.10ではうまく動作しませんでした。 PHPバージョン4.3.10で動作させるには、どうすればよいか教えていただけませんか? <form action="mail.php" method="post"> <input name="member[]" type="checkbox" value="AAA" checked>AAA <input name="member[]" type="checkbox" value="BBB" checked>BBB <input name="member[]" type="checkbox" value="CCC" checked>CCC <input type="submit" value="send"> </form> mail.php <?PHP if(is_array($member)){ $txt ="あなたの選んだのは"; foreach ($member as $key=>$val){ if ($key==0){ $txt .=$val; }else{ $txt .="、".$val; } } $txt.="です"; }else{ $txt="あなたは誰も選んでません"; } print $txt; ?>

    • ベストアンサー
    • PHP
  • locationで再読込と同時に書き込みができない

    AAAフレーム BBBフレームのページを作成しております。 下記のようなフォームを使い、一言送信を行っております。 <form action="BBB.php" method="post" target="BBB" onsubmit="location.href='AAA.php';"> 一言<br> <input type="text" name="hitokoto" maxlength="100" size="30" value=""><br> <input type="submit" value="送信"> <input type="hidden" name="basyo" value="ホームページからの書き込み"> </form> フォームで送信されたものは、BBBフレームのBBB.phpで処理を行うのですが、 同時にAAAフレームにあるAAA.phpも再読込させたいと考えており、 javascriptは無知ですが、調べたところ、上記にあるような、 onsubmit="location.href='AAA.php' というのが合うかと思い、<form>に加えたのですが、 1回目一言フォームに書き込み送信すると、書き込まれず 2回目一言フォームに書き込み送信すると、書き込めます 3回目は書きこまれず 4回目は書き込めます 以降、書き込めない・書き込めるを繰り返します どういう状況かご存じの方いらっしゃいましたら、どうかお教え下さい。

  • 2つのボタンによるSubmitについて

    javascript初心者です。 <form name="sample01" action="aaa.html" method="POST" >  <input type="checkbox" name="chk[]" value="1">  <input type="checkbox" name="chk[]" value="2">  <input type="checkbox" name="chk[]" value="3"> </form> このチェックボックスの値を、submitで渡したいのですが、 AボタンとBボタンの2つ設けて、それぞれクリックすると別ファイルに遷移させたいのです。 Aボタンは、「sample01」のaction属性にあるaaa.html Bボタンは、bbb.html こういったことはできるのでしょうか?

  • フォーム内の値の指定方法

    JavaScriptで、 フォーム内の値を指定するとき、どちらの記述がwebの標準として正しいのでしょうか? document.form1.aaa.value form1.aaa.value  【フォーム】 <from name="form1"> <input type="textbox" name="aaa"> </form>

専門家に質問してみよう