it-swarm-ko.com

URL AJAX 요청을 위해 jQuery에서 문자열 인코딩

내 애플리케이션에서 Google의 빠른 검색을 구현하고 있습니다. 사용자가 텍스트 입력을 입력 할 때 HTTP 요청을 실행하고 싶습니다. 내가 가지고있는 유일한 문제는 사용자가 이름과 성 사이의 공백에 도달하면 공백이 +로 인코딩되지 않아 검색이 중단된다는 것입니다. 어떻게 공간을 +로 대체 할 수 있습니까? 아니면 안전하게 URL 인코딩 할 수 있습니까?

$("#search").keypress(function(){       
    var query = "{% url accounts.views.instasearch  %}?q=" + $('#tags').val();
    var options = {};
    $("#results").html(ajax_load).load(query);
});
203
Brian D

보십시오 encodeURIComponent .

특정 문자의 각 인스턴스를 문자의 UTF-8 인코딩을 나타내는 하나, 둘, 셋 또는 네 개의 이스케이프 시퀀스로 대체하여 URI (Uniform Resource Identifier) ​​구성 요소를 인코딩합니다. 두 개의 "대리모 (surrogate) "문자).

예:

var encoded = encodeURIComponent(str);
468
Anders Fjeldstad

encodeURIComponent 나를 위해 잘 작동합니다. 우리는 아약스 호출에서 이와 같은 URL을 제공 할 수 있습니다. 코드는 아래와 같습니다.

  $.ajax({
    cache: false,
    type: "POST",
    url: "http://atandra.mivamerchantdev.com//mm5/json.mvc?Store_Code=ATA&Function=Module&Module_Code=thub_connector&Module_Function=THUB_Request",
    data: "strChannelName=" + $('#txtupdstorename').val() + "&ServiceUrl=" + encodeURIComponent($('#txtupdserviceurl').val()),
    dataType: "HTML",
    success: function (data) {
    },
    error: function (xhr, ajaxOptions, thrownError) {
    }
  });
21
Praveen04

더 좋은 방법:

encodeURIComponent 는 다음을 제외한 모든 문자를 이스케이프 처리합니다. alphabetic, decimal digits, - _ . ! ~ * ' ( )

서버에 대한 예기치 않은 요청을 피하려면 사용자가 입력 한 매개 변수에 encodeURIComponent를 호출해야합니다.이 매개 변수는 URI의 일부로 전달됩니다. 예를 들어, 사용자는 변수 주석에 대해 "시간 & 시간 = 다시"를 입력 할 수 있습니다. 이 변수에 encodeURIComponent를 사용하지 않으면 comment = Thyme % 20 & time =을 다시 표시합니다. 앰퍼샌드와 등호는 새 키와 값 쌍을 표시합니다. 따라서 POST 설명 키를 "시간 & 시간 = 다시"와 같게하는 대신 두 개의 POST 키가 있습니다. 하나는 "타임"과 같고 다른 하나는 다시 시간과 같습니다.

Application/x-www-form-urlencoded (POST), per http://www.w3.org/TR/html401/interac...m-content-type , 공백은 '+'로 대체되어야하므로 "% 20"을 "+"로 추가 교체하여 encodeURIComponent 대체를 수행하고자 할 수 있습니다.

RFC 3986 (!, ', (,) 및 *를 보유하고 있음)을 준수 할 때 더욱 엄격 해지기를 원하는 경우, 이러한 문자에 정형화 된 URI 구분 사용이 없더라도 다음을 안전하게 사용할 수 있습니다.

function fixedEncodeURIComponent (str) {
  return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}
8
StackOverFlow

MVC3/EntityFramework 백엔드로 사용하고 프런트 엔드 jQuery, 직접 게시 ($ .post를 사용하여) 내 프로젝트 컨트롤러를 소비하지 않는 데이터 encription, 하드 직접 URL 이외의 매개 변수를 전달할 때 필요합니다. 이미 여러 문자를 테스트했는데 URL (이 URL )을 보냈습니다. http://www.ihackforfun.eu/index.php?title=update-on-url-crazy&more=1&c=1&tb=1&pb= 1 )을 매개 변수로 사용하고 URL에서 모든 데이터를 전달할 때 encodeURIComponent가 훌륭하게 작동하더라도 전혀 문제가 없습니다 (하드 코드 된)

하드 코드 된 URL 즉>

 var encodedName = encodeURIComponent(name);
 var url = "ControllerName/ActionName/" + encodedName + "/" + keyword + "/" + description + "/" + linkUrl + "/" + includeMetrics + "/" + typeTask + "/" + project + "/" + userCreated + "/" + userModified + "/" + status + "/" + parent;; // + name + "/" + keyword + "/" + description + "/" + linkUrl + "/" + includeMetrics + "/" + typeTask + "/" + project + "/" + userCreated + "/" + userModified + "/" + status + "/" + parent;

그렇지 않으면 encodeURIComponent를 사용하지 말고 대신 ajax post 메서드 내에서 params를 전달하십시오.

 var url = "ControllerName/ActionName/";   
 $.post(url,
        { name: nameVal, fkKeyword: keyword, description: descriptionVal, linkUrl: linkUrlVal, includeMetrics: includeMetricsVal, FKTypeTask: typeTask, FKProject: project, FKUserCreated: userCreated, FKUserModified: userModified, FKStatus: status, FKParent: parent },
 function (data) {.......});
4
d1jhoni1b

이거 한번 해봐

var query = "{% url accounts.views.instasearch  %}?q=" + $('#tags').val().replace(/ /g, '+');
0
genesis