16

ユーザーが入力を入力するid txtPlaceのテキスト入力を含むフォームがあり、URLクエリとしてサーバーに渡されます。encodeURIComponent() を使用しようとしていますが、スペースをエンコードしていません。これが私の簡略化されたコードです

<div class="searchBoxRow">
  <input type="text" id="txtPlace" size="55" placeholder="Enter place to search"/>
  <a href="#" id="btnSearch">Search</a> 
</div>

ここに私のjavascriptがあります

<script type="text/javascript">
  $(function () {
     $('#btnSearch').on('click', function (e) {
        e.preventDefault;
        var place = encodeURIComponent($('#txtPlace').val());
        var url = "http://example.com?place=" + place;
        document.location.href = url;
     });
  });    
</script>

ユーザーがACME Co.,New York, NYと入力すると、生成される URL は

http://example.com?place=ACME Co.%2Cニューヨーク%2C NY

スペースがエンコードされていないことがわかりますか? 追加しようとしましplace = place.replace(/\s/g, '+')たが、エンコード後に機能しないようです。私は何を間違っていますか?ご協力ありがとうございます。

アップデート:

Firefoxのせいだ!スペースが適切にエンコードされていることがわかりましたが、Firefoxはエンコードされているにもかかわらずスペースを表示していません。Internet Explorer 10Google Chromeでテストされ、どちらもエンコードされた形式でスペースを表示します。フィドルをありがとうアダムhttp://jsfiddle.net/VYDcv/

4

2 に答える 2

11

何を見ているのかわかりませんが、encodeURIComponentスペース文字をエスケープします。

コードに基づいて、このフィドルを参照してください: http://jsfiddle.net/VYDcv/

「Hello world」と入力すると、スペースが%20.

アラート結果:http://example.com?place=Hello%20World

ブラウザの を設定すると、アドレス バーdocument.location.hrefの後ろがスペースに変更されている可能性があります%20が、JavaScript によってエスケープされています。

于 2013-05-16T22:24:04.930 に答える
2

これは私にとって簡単な解決策です:

<script type="text/javascript">
  $(function () {
     $('#btnSearch').on('click', function (e) {
        e.preventDefault;
        var place = encodeURIComponent($('#txtPlace').val());
        place=place.replace(" ", "+"); //or .replace(" ", "%20")
        var url = "http://example.com?place=" + place;
        document.location.href = url;
     });
  });    
</script>
于 2013-05-16T22:24:52.720 に答える