-
javascript sms보내기 URL 파라미터 앰퍼샌드 뒤로 문자열 사라지는 문제JavaScript 2019. 7. 2. 23:16
URL링크를 SMS으로 보내는 작업을 하는도중 URL뒤에 파라메터가 &이후로 잘리는 현상이 있었다.
예를 들어 파라메터 2개가 포함된 Test URL이 있다고 하고 예를 들어보겠다. ( checkMobile() 함수에 대해서는 맨아래 해당 링크를 확인해라. 단 모바일기기가 ios, android 두개만 있다고 가정하고 사용하면 좋을거 같다. 제3의 OS가 있다면 오작동을 할 수도있다.)
1234var testMsg = "테스트 URL 입니다.\n\n"var testURL = "www.test.com/test.jsp?param1=abc¶m2=def";location.href = 'sms:' + ( checkMobile() == 'ios' ? '&' : '?' ) + 'body=' + testMsg + testURL;Colored by Color Scripter이렇게 구성이 되었을때 예상되는 메세지 모습은 아래와 같을것이다.
1234테스트 URL 입니다.www.test.com/test.jsp?param1=abc¶m2=defColored by Color Scripter하지만 실제 실행시키고 나면 예상과는 다른 모습이 나올것이다.
12테스트 URL 입니다.www.test.com/test.jsp?param1=abcColored by Color Scripter1. 개행문제.
2. &를 포함한 뒤로 문자열이 없어진다.
해결방법으로 인코딩을 해주어야한다.
1. 개행의 경우에는 \n -> %0a 로 변환해주어야한다.
123var testMsg = "테스트 URL 입니다.\n\n"var message = testMsg.replace(/(\n|\r\n)/g, "%0a");Colored by Color Scripter2. &문자 뒤로 사라지는 문제는 인코딩을 두번해주니 해결할 수 있었다.
1234var testURL = "www.test.com/test.jsp?param1=abc¶m2=def";var url = testURL.replace("&", "%2526");Colored by Color Scripter종류 URL코드 특징 & %26 각각의 인자를 구분할 때 사용한다. % %25 16진수(Hex)값을 표현할때 사용한다. 사실 두번째 문제인 &구분자 뒤로 문자열이 다 사라지는 원인에 대해서는 정확히 모르겠다.
&문자를 %26 , & 바꿔주면 된다. url 인코딩을 해주면된다. 등의 글을 보고서 해당문자로 치환해주고 url을 encodeURIComponent(URI)로 인코딩을 해줘도 &뒤로 문자는 사라졌다.
결국 &를 두번 인코딩을 해주는 방법으로 & -> %2526 으로 치환을 해주니 문제를 해결할 수 있었다.
정확한 원인을 아는분이 있다면 알려주시면 좋을꺼 같다.
마지막으로 다음과 같이 사용하면 URL에 포함된 &뒤로 파라메타들이 사라지는 문제를 해결할 수 있다.
12345678var testMsg = "테스트 URL 입니다.\n\n"var message = testMsg.replace(/(\n|\r\n)/g, "%0a");var testURL = "www.test.com/test.jsp?param1=abc¶m2=def";var url = testURL.replace("&", "%2526");location.href = 'sms:' +( checkMobile() == 'ios' ? '&' : '?') + 'body=' + message + url;Colored by Color ScriptercheckMobile() 함수는 아래 게시글을 보면 나와있다.
https://justbobby.tistory.com/20
https://justbobby.tistory.com/20'JavaScript' 카테고리의 다른 글
모바일 웹 javascript SMS 문자보내기( location.href ) (2) 2019.07.02 javascript 안드로이드 아이폰 구분 (0) 2019.07.02 댓글