8

同じ名前の複数のチェックボックスを含むフォームを送信すると、次のようなURLが表示されます:www.mysite.com/search.php?myvalue%5B%5D=value1&myvalue%5B%5D=value2

htaccessのようなものでURLを「きれい」にするために%5B%5Dを削除できる方法はありますか?

コード:

<form>
     <input type="checkbox" name="myvalue[]" value="value1">
     <input type="checkbox" name="myvalue[]" value="value2">
</form>
4

3 に答える 3

16

%5B%5D を削除して、htaccess などで URL を「きれい」にする方法はありますか?

いいえ。[]はURL の予約文字であるため、必ずURL エンコードする必要があります。

POST を使用できない場合は、それが検索フォームであることを考えると理にかなっていますが、最善の策は、値が 1 程度の異なる名前をそれぞれに付けることです。

<form>
    <input type="checkbox" name="option1" value="1" />
    <input type="checkbox" name="option2" value="1" />
</form>

または、本当に同じ名前を使用することを主張する場合は、名前に接尾辞が付いたパラメーターを取得するときに配列を返すという PHP 固有の機能に依存するのではなく、クエリ文字列を自分で抽出する必要があります[]

$params = explode('&', $_SERVER['QUERY_STRING']);

foreach ($params as $param) {
    $name_value = explode('=', $param);
    $name = $name_value[0];
    $value = $name_value[1];
    // ... Collect them yourself.
}

このようにして、ブレースなしの名前を使い続けることができます。

<form>
    <input type="checkbox" name="option" value="option1" />
    <input type="checkbox" name="option" value="option2" />
</form>
于 2013-01-04T16:41:06.700 に答える
3

[]は URL の予約文字であるため、URL が正しく機能するためにブラウザはそれらをエンコードする必要があります。これらの文字を URL に含めることはできません。また、スペースやアンパサンドなどの他の予約文字を使用することもできません。それらはすべて自動的にエンコードされます (多くの場合、ブラウザーに手動で URL を入力した場合でも)。

「きれいな URL」が必要な場合は、次のことができます。

  1. フォームをまったく使用しないでください。既知の「きれいな」URL へのリンクを提供します。

  2. 醜い URL を受け入れますが、すぐに上記のポイント 1 のきれいな URL にリダイレクトします。

  3. フィールド名に山かっこを使用しないでください (ただし、バックエンド コードにも多くの変更が必要になります)。

  4. フォームでメソッドを使用しPOSTて、フィールド データが URL にまったく表示されないようにします (ただし、これは、ユーザーがブックマークできるリンクがないことを意味します)。

この URL を「きれいにする」必要がある場合、私の提案は上記のオプション 2 です。

率直に言って、私はそれについて心配する必要はありません。人々は、「きれいな」URL についてストレスを感じるようになります。理由がよくわかりません。

  • ドメイン名よりも長い URL を実際に入力したことのある人はほとんどいません。
  • このための SEO を心配している場合は、心配しないでください。検索エンジンのボットは、ULR エンコーディングが何であるかを知っており、それを見過ごすことができます。
  • 「きれいな」URL が必要なもう 1 つの理由は、ユーザーがメール リンクなどで URL を共有した場合に見栄えを良くするためです。正直なところ、URL の見栄えが心配で、そこにフォーム フィールドが含まれているとしたら、あちこちに&&=記号だけが表示されて、見苦しくなりすぎます。エンコードされたブラケットは、実際には悪化しません。

だから私の正直な答えは、「気にしないで」です。それは正常です。それを無視します; Web 開発作業のより重要な部分に取り掛かります。

于 2013-01-04T16:53:51.963 に答える
0

それが本当にあなたにとって問題である場合は、ある種のセパレーター,(またはあなたが望むもの)を使用して、すべてを単一のパラメーターに「マージ」してみてください。したがって、 のような URI ではなく、 のようなmyvalue%5B%5D=value1&myvalue%5B%5D=value2URI になりますmyvalue=value1,value2

これは単なるアイデアです。現在コードはありませんが、JS で実行し、バックエンドで param 値を解析する必要があります (配列を作成するため)。

于 2021-04-08T11:54:53.197 に答える