문제

나는 그것을 알고있다 + URL의 쿼리 문자열에서 공간을 나타냅니다. 이것은 또한 쿼리 문자열 영역 외부의 경우입니까? 즉, 다음 URL을 수행합니다.

http://a.com/a+b/c

실제로 :

http://a.com/a b/c

(따라서 실제로 필요한 경우 인코딩해야합니다. +), 또는 실제로 실제로 나타냅니다 a+b/c?

도움이 되었습니까?

해결책

  • URL의 경로 섹션에서 인코딩 백분율은 해독 될 것으로 예상되지만
  • 어느 + 경로 구성 요소의 문자는 문자 그대로 처리 될 것으로 예상됩니다.

명시 적으로 : + 쿼리 구성 요소의 특수 문자 일뿐입니다.

다른 팁

해당 URL 인코딩 된 문자의 멋진 목록을 찾을 수 있습니다. W3Schools.

  • + becomes %2B
  • 공간이됩니다 %20

공간 문자는 한 컨텍스트에서 "+"로만 인코딩 될 수 있습니다.

RFC-1866 (HTML 2.0 사양), 단락 8.2.1. 하위 단락 1 : "양식 필드 이름과 값이 빠져 나옵니다. 공간 문자는`+'로 대체 된 다음 예약 된 문자가 탈출됩니다")).

다음은 RFC-1866이 공백을 플러스로 인코딩 할 수있는 URL의 이러한 문자열의 예입니다. "http://example.com/over/there?name=foo+bar". 그러므로"이후에만 "? html 4.01 사양에 대한 응용 프로그램/x-www- urlencoded에 관한 단락.

그러나 항상 컨텍스트를 올바르게 결정하기가 어렵 기 때문에 공백을 "+"로 인코딩하지 않는 것이 가장 좋습니다. RFC-3986, p.2.3에 정의 된 "보존되지 않은"을 제외한 모든 문자를 퍼센트하는 것이 좋습니다. 다음은 인코딩해야 할 내용을 보여주는 코드 예제입니다. 델파이 (Pascal) 프로그래밍 언어로 제공되지만 소유 한 언어에 관계없이 모든 프로그래머에게 어떻게 작동하는지 이해하는 것은 매우 쉽습니다.

(* percent-encode all unreserved characters as defined in RFC-3986, p.2.3 *)
function UrlEncodeRfcA(const S: AnsiString): AnsiString;
const    
  HexCharArrA: array [0..15] of AnsiChar = '0123456789ABCDEF';
var
  I: Integer;
  c: AnsiChar;
begin
 // percent-encoding, see RFC-3986, p. 2.1
  Result := S;
  for I := Length(S) downto 1 do
  begin
    c := S[I];
    case c of
      'A' .. 'Z', 'a' .. 'z', // alpha
      '0' .. '9',             // digit
      '-', '.', '_', '~':;    // rest of unreserved characters as defined in the RFC-3986, p.2.3
      else
        begin
          Result[I] := '%';
          Insert('00', Result, I + 1);
          Result[I + 1] := HexCharArrA[(Byte(C) shr 4) and $F)];
          Result[I + 2] := HexCharArrA[Byte(C) and $F];
        end;
    end;
  end;
end;

function UrlEncodeRfcW(const S: UnicodeString): AnsiString;
begin
  Result := UrlEncodeRfcA(Utf8Encode(S));
end;

EncodeUricomponent 함수를 사용하여 URL을 수정하면 브라우저 및 Node.js에서 작동합니다.

res.redirect("/signin?email="+encodeURIComponent("aaa+bbb-ccc@example.com"));


> encodeURIComponent("http://a.com/a+b/c")
'http%3A%2F%2Fa.com%2Fa%2Bb%2Fc'

아래 시도 :

<script type="text/javascript">

function resetPassword() {
   url: "submitForgotPassword.html?email="+fixEscape(Stringwith+char);
}
function fixEscape(str)
{
    return escape(str).replace( "+", "%2B" );
}
</script>

당신은 항상 URL을 인코딩합니다.

루비가 URL을 인코딩하는 방법은 다음과 같습니다.

irb(main):008:0> CGI.escape "a.com/a+b"
=> "a.com%2Fa%2Bb"
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top