>

다음과 같이 서버에 보내는 직렬화 된 문자열이 있습니다 :

counter=1&Id=4&type=2332&amount=3232&gstIncluded=3232&paymentMethod=2&notes=2332#fdsf&docId=0&ref=3232&isEdit=true

여기서 직면 한 문제는 사용자가 추가 한 메모에 "#"기호가 있다는 것입니다. 이로 인해 쿼리 문자열이 손상되고 컨트롤러에서 # 다음에 데이터가 수신되지 않습니다. docId, ref 및 isEdit도 건너 뜁니다.

누구든지 이것에 대한 더 나은 해결책을 말해 줄 수 있습니까?

노트 필드를 html 이스케이프하려고 시도했지만 # 이스케이프하지 않습니다.


  • 답변 # 1

    #  은 URI (Uniform Resource Identifier)에있을 때 인코딩해야하는 문자입니다. 일반적으로 어떤 ID가 선택/전송되었는지 표시하는 데 사용되기 때문입니다.

    당신은 # 를 볼 수 있습니다  주소 표시 줄의 URI 끝에서 페이지의 요소 ID가 올 수 있습니다. 예를 들어 Lodash 문서 ( _.uniqBy )가 있습니다.  예를 들어. 내장 된 encodeURIComponent 를 사용할 수 있습니다  그것을 인코딩하는 기능. 인코딩 된 %23 처럼 보입니다. :

    console.log(encodeURIComponent("#"));
    
    

    전체 URI를 다음과 같이 인코딩 할 수도 있습니다 :

    console.log(encodeURIComponent("counter=1&Id=4&type=2332&amount=3232&gstIncluded=3232&paymentMethod=2&notes=2332#fdsf&docId=0&ref=3232&isEdit=true"));
    
    

  • 답변 # 2

    encodeURIComponent 를 사용할 수 있습니다  노트 값 (그리고이 특정 값에서만, 그렇지 않으면 다른 매개 변수를 구문 분석 할 수 없습니다)-해시 태그를 이스케이프 처리합니다. MDN의 문서를 참조하십시오 : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/encodeURIComponent

  • 답변 # 3

    이것을 시도하십시오

    let url = "counter=1&Id=4&type=2332&amount=3232&gstIncluded=3232&paymentMethod=2&notes=2332#fdsf&docId=0&ref=3232&isEdit=true";
    url.replace("#","%23");
    
    

    그런 다음 서버로 전송하면 예약 문자의 ASCII 값이 사용됩니다

  • 이전 javascript - nodeJS requirepaths로 문제 해결
  • 다음 java - 다른 람다 식에서 람다 식의 객체를 사용하는 방법