如何更改<form>的Get方法生成的搜索URL?

时间:2018-03-14 作者:Byeongin Yoon

我正在开发“多类别选择搜索表单”。让它像这样

<form role="search" action="http://localhost:5757/alpool/" method="get">
    <input type="hidden" name="alp-search" value="true">
    <div class="ui fluid search dropdown huge selection multiple">
      <select name="cat_s[]" multiple="multiple"> 
        <option value=""> Select Category </option>
        <option value="358">Apple</option>
        <option value="399">Banana</option>
        <option value="359">Water</option>
      </select>
    </div>
    <button type="submit" class="ui primary basic button">검색</button>
</form>
当我选择“苹果”和“香蕉”时,我的浏览器会显示这个。

http://localhost:5757/alpool/?alp-search=true&cat_s%5B%5D=358&cat_s%5B%5D=399
我的问题是这些。

%5B%5D是什么

http://localhost:5757/alpool/?alp-search=true&cat_s=358,399

(我应该使用javascript还是PHP?)

谢谢

2 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我的问题是这些。

%5B%5D是什么

http://localhost:5757/alpool/?alp-search=true&cat_s=358,399

  1. %5B%5D 的URL编码版本[ (左方括号)和] (右方括号)字符。看见Percent-encoding reserved characters 在维基百科上。

    您可以使用JavaScript“更改”它,下面是一个示例,说明如何在不对form 您当前拥有的标记:

    您需要做的唯一更改是添加alp-search-formclass 的属性form. 其余部分可以/应该保持不变

The JS Script

jQuery( function( $ ) {
  $( \'.alp-search-form\' ).on( \'submit\', function( e ) {
    e.preventDefault();

    var url = $( this ).attr( \'action\' ),
      cat_ids = $( \'select[name="cat_s[]"]\', this ).val() || [],
      s = /\\?[a-z0-9]+/i.test( url ) ? \'&\' : \'?\';

    url += s + \'alp-search=true\';
    url += \'&cat_s=\' + cat_ids.join( \',\' );

    // "Submits" the form.
    //location.href = url; // Uncomment after done testing.
    alert( url );          // Remove this after done testing.
  } );
} );

Demo on JS Bin

Additional Note

在PHP脚本中/function 处理表单数据(或处理搜索)的wp_parse_id_list() 功能)获取所选类别ID:

// This variable will/should always be an array.
$cat_ids = isset( $_GET[\'cat_s\'] ) ?
    wp_parse_id_list( $_GET[\'cat_s\'] ) : array();

SO网友:danielh

%5B%5D为URL编码[], 按规定cat_s[].

如果希望它以逗号分隔的形式提交,我认为必须使用一些JavaScript来修改提交的结果(在提交事件上,修改/添加包含逗号分隔值的变量)。

PHP也可以在不使用客户端JavaScript的情况下读取数组(如果您提交到PHP页面)。

结束

相关推荐

url redirect none www to www

在我的常规设置中,url显示不带www如果我这样放置www我需要做什么。htaccess mod\\u rewrite重定向我的none www(example.com)doamin重定向www(www.example.com)或这是否正确处理url重定向?