【问题标题】:Prevent plus sign from being encoded on form submit防止在表单提交时对加号进行编码
【发布时间】:2016-01-29 03:56:06
【问题描述】:

所以,我的网站上有一个搜索表单,它是 GET 提交给第三方网站的。其中一个输入值用于细分名称,第三方要求它是带有空格的 + 符号的细分名称。因此,我的值正在被解析并用 + 替换空格,但是,在提交时,这些值会被浏览器 urlencoded 并且反过来不会被第 3 方解析。我的第一个想法是它们是不通过不解码他们的价值来完成他们的工作......但在我开始处理他们的客户支持的痛苦过程之前,我宁愿先在这里检查一下,看看是否有办法解决它。

编辑:这是我的代码(网址已被删除)

<form action="IDXBroker" method="GET">
    <h2>IDX Quick Search</h2>
    <div class="element">
        <label for="pt">Property Type</label>
        <select name="pt" id="pt">
            <option value="all">All</option>
            <option value="1" selected="selected">Residential</option>
            <option value="2">Commercial</option>
            <option value="3">Lots and Land</option>
            <option value="4">Rental</option>
            <option value="5">Multi-Family</option>
        </select>
    </div>
    <div class="element" ng-controller="searchCtrl" class="city-search">
        <label for="city">City/Subdivision</label>
        <input type="text" ng-model="searchTerm" ng-change="setShowResults()"/>
        <ul class="city-results" ng-show="showResults && searchTerm.length >= 3">
            <li ng-repeat="item in results | stringSearch:searchTerm"><a href="#" ng-click="selectCity(item)">{{item.data}}</a></li>
            <li ng-show="(results | stringSearch:searchTerm).length === 0 && searchTerm.length >= 3">No Results Found</li>
        </ul>
        <input type="hidden" name="{{searchType}}" value="{{searchTermValue.split(' ').join('+')}}" />
    </div>
    <div class="element">
        <label for="lp">Min Price</label>
        <input id="lp" name="lp" type="number" value="200000" />
    </div>
    <div class="element">
        <label for="hp">Max Price</label>
        <input id="hp" name="hp" type="number" />
    </div>
    <div class="element">
        <label for="bd">Min Bedrooms</label>
        <input id="bd" name="bd" type="text" />
    </div>
    <div class="element">
        <label for="tb">Max Bedrooms</label>
        <input name="tb" type="text" />
    </div>
    <input type="hidden" name="srt" value="newest" />
    <div class="buttons">
        <input type="submit" value="Search Now" />
    </div>
</form>

【问题讨论】:

  • 你能给我们一些代码吗?
  • 表单是如何被序列化的,你是这样做的还是只是在提交表单时让浏览器这样做?
  • 我让浏览器来做,但没有办法解决这个问题,是吗?似乎无论我事先尝试做什么,网址编码或用 + 替换空格,它都可以做到

标签: javascript html angularjs forms


【解决方案1】:

不确定是否可以强制浏览器不对加号进行编码。作为一种解决方法,您可以使用 js 重新加载窗口。像

var id1value = document.getElementById('hp').value;
var id2value = document.getElementById('lp').value;
//repeat for all your inputs to build your string

var q = 'hp=' + id1value + '&lp=' + id2value;

window.location = 'http://IDXBrokerURL?' + q;`

在提交中添加一个 onclick 以运行您的 js 函数。那么根本就没有编码。

我会将此编码问题提交给他们的开发人员支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2014-11-11
    • 2015-03-05
    • 2011-03-21
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多