ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • javascript sms보내기 URL 파라미터 앰퍼샌드 뒤로 문자열 사라지는 문제
    JavaScript 2019. 7. 2. 23:16

    URL링크를 SMS으로 보내는 작업을 하는도중 URL뒤에 파라메터가 &이후로 잘리는 현상이 있었다.

    예를 들어 파라메터 2개가 포함된 Test URL이 있다고 하고 예를 들어보겠다. ( checkMobile() 함수에 대해서는 맨아래 해당 링크를 확인해라. 단 모바일기기가 ios, android 두개만 있다고 가정하고 사용하면 좋을거 같다. 제3의 OS가 있다면 오작동을 할 수도있다.)

     

    1
    2
    3
    4
    var testMsg = "테스트 URL 입니다.\n\n"
    var testURL = "www.test.com/test.jsp?param1=abc&param2=def";    
    location.href = 'sms:' + ( checkMobile() == 'ios' ? '&' : '?' ) + 'body=' + testMsg + testURL;
     
    Colored by Color Scripter

     

     

    이렇게 구성이 되었을때 예상되는 메세지 모습은 아래와 같을것이다.

    1
    2
    3
    4
    테스트 URL 입니다.
     
    www.test.com/test.jsp?param1=abc&param2=def
     
    Colored by Color Scripter

     

     

    하지만 실제 실행시키고 나면 예상과는 다른 모습이 나올것이다.

    1
    2
    테스트 URL 입니다.www.test.com/test.jsp?param1=abc
     
    Colored by Color Scripter

     

     

     

    1. 개행문제.

    2. &를 포함한 뒤로 문자열이 없어진다.

    해결방법으로 인코딩을 해주어야한다.

    1. 개행의 경우에는 \n -> %0a 로 변환해주어야한다.

    1
    2
    3
    var testMsg = "테스트 URL 입니다.\n\n"
    var message = testMsg.replace(/(\n|\r\n)/g, "%0a");
     
    Colored by Color Scripter

     

    2. &문자 뒤로 사라지는 문제는 인코딩을 두번해주니 해결할 수 있었다.

    1
    2
    3
    4
    var testURL = "www.test.com/test.jsp?param1=abc&param2=def";
    var url = testURL.replace("&""%2526");
     
     
    Colored by Color Scripter

     

     

    종류 URL코드 특징
    & %26 각각의 인자를 구분할 때 사용한다.
    % %25 16진수(Hex)값을 표현할때 사용한다.

     

     

    사실 두번째 문제인 &구분자 뒤로 문자열이 다 사라지는 원인에 대해서는 정확히 모르겠다.

    &문자를 %26 , & 바꿔주면 된다. url 인코딩을 해주면된다. 등의 글을 보고서 해당문자로 치환해주고 url을 encodeURIComponent(URI)로 인코딩을 해줘도 &뒤로 문자는 사라졌다.

    결국 &를 두번 인코딩을 해주는 방법으로 & -> %2526 으로 치환을 해주니 문제를 해결할 수 있었다.

    정확한 원인을 아는분이 있다면 알려주시면 좋을꺼 같다.

    마지막으로 다음과 같이 사용하면 URL에 포함된 &뒤로 파라메타들이 사라지는 문제를 해결할 수 있다.

    1
    2
    3
    4
    5
    6
    7
    8
    var testMsg = "테스트 URL 입니다.\n\n"
    var message = testMsg.replace(/(\n|\r\n)/g, "%0a");
     
    var testURL = "www.test.com/test.jsp?param1=abc&param2=def";
    var url = testURL.replace("&""%2526");
     
    location.href = 'sms:' +( checkMobile() == 'ios' ? '&' : '?'+ 'body=' + message + url;
     
    Colored by Color Scripter

     

     

    checkMobile() 함수는 아래 게시글을 보면 나와있다.

     

    https://justbobby.tistory.com/20

     

    javascript 안드로이드 아이폰 구분

    하이브리드 및 웹 앱을 만들다보면 Android 와 IOS를 구분해야하는 부분들이 생긴다. ​ 자바스크립트에서 접속자의 브라우저 정보 및 디바이스 정보를 가지고있는 User-Agent라는 객체를 사용하여 Android와 IOS..

    justbobby.tistory.com

     

     

    https://justbobby.tistory.com/20

     

    댓글

Designed by Tistory.