1

次のような Codeigniter を使用した URL が必要です。

example?type=1,2,3,4

これを手動で入力して、このような URL に移動すると、システムは正常に動作します。ただし、タイプに複数の値を投稿したい GET を使用するフォームがあります。入力を結合するためにJavascriptを使用しています。

<form action="example" method="GET" id="type-form">
    <select multiple="multiple" name="_type[]" id="type-array-id-1">
        <option value="1">Type 1</option>
        <option value="2">Type 2</option>
        <option value="3">Type 3</option>
        <option value="4">Type 4</option>
        <option value="5">Type 5</option>
    </select>
    <input type="hidden" name="type" id="type-comma-sep"/>
    <input type="submit" value="Get" />
</form>
<script>
    $("#type-form").bind("submit",function(){
        var type_array = $("#type-array-id-1").val().join(",");
        $("#type-array-id-1").val("");
        $("#type-comma-sep").val(type_array);
    });
</script>

私は他のいくつかのSOの質問の回答を使用して、ここまで来ましたが、フォームを送信すると、次のようになります。

example?type=1%2C2%2C3%2C4

私のバックエンドは、URL に存在する「,」に依存しています。では、URL にカンマを強制するにはどうすればよいでしょうか。

htaccess の書き換えも試しました (ただし、これが正しいかどうかはわかりません)。

RewriteCond %{REQUEST_URI} ^([^\%2C]*)\%2C(.*)$
RewriteRule .* %1,%2 [R=301,L]

そして、encodeURIComponent(type_array) と encodeURI(type_array) を使用してみましたが、違いはありませんでした。

また、Codeigniter の設定は次のとおりです。

$config['permitted_uri_chars'] = 'a-z 0-9~%.,:_\-';

そして system/libraries/input.php 内

if ( ! preg_match('/^[a-z0-9,:_\/-]+$/i', $str))

そう...

  1. URL にカンマを強制するにはどうすればよいですか (Javascript が望ましい)。
  2. ソリューションはクロスブラウザーで動作しますか?
4

1 に答える 1

1

Javascriptを介してリダイレクトを行う場合は、問題ないはずです。

$("#type-form").bind("submit",function(){
    var type_array = $("#type-array-id-1").val().join(",");

    window.location = '?type='+type_array;

    return false;
});

フォームを正常に送信させると、すべてのクエリ文字列パラメータがURLエンコードされ、カンマに変換されます。

カンマを使用してURLを明示的に設定した場合は、正常に機能するはずです(または、少なくとも上記のテスト例では機能しました)。

于 2012-09-17T12:06:30.470 に答える