C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

건의사항
[437] Re:회원정보 수정에서 이메일 입력 부분.
박지훈.임프 [cbuilder] 2825 읽음    2006-03-17 21:11
좀 이해하기 어려우시겠지만, 결론적으로 말하자면 파이어폭스의 버그군요.

포럼에서 디비에 저장된 모든 메일주소는 웹페이지에서 보여질 때는 강제로 URL 인코딩됩니다.
이유는 메일주소를 긁어가는 크롤러들을 막기 위한 거구요. 메일주소 크롤러들은 메일주소를 인식하기 위해 @ 문자를
인식하는데, @ 문자를 포함해서 메일주소의 모든 문자들을 URL 인코딩해버리면 크롤러들이 인식하기 어렵죠.
하지만 웹브라우저에서는 URL 인코드된 문자열은 자동으로 디코드하므로 웹페이지에서는 마치 처음부터 인코딩이 되지
않았던 것처럼 보이게 됩니다.

메일주소 입력 input 태그는 최대 입력길이, 즉 maxlength 속성 값이 50으로 설정되어 있습니다.
이건 포럼 디비에서 메일주소가 최대 50으로 잡혀있기 때문에 그런 거구요.
그런데... 파이어폭스가 URL인코딩된 문자열을 디코딩하기 전에 이 maxlength 값을 적용해버리는군요.
인코딩된 문자열은 당연히 길이가 늘어나는데(1바이트가 3바이트로 늘어나니까 3배로 늘어나죠), 디코딩 전에 적용하면
인코딩된 긴 문자열에서 50이 넘는 부분이 잘려버리게 되는 겁니다.

디코딩하기 전에 maxlength를 적용하는 것이 맞냐 아니냐가 좀 애매하게 느껴질 수 있을텐데, 디코딩 후에 적용하는 것이
당연히 맞습니다. 바로 지금과 같은 경우가 발생할 수 있으니까요. maxlength를 충분히 길게 줄 수도 있겠지만, 그렇다고
해결이 되지도 않습니다. maxlength를 길게 줘버리면 디비 필드의 길이를 넘어가게 되고, 그렇다고 필드 길이를 더 늘리면
다시 그 세배까지의 입력을 허용해야 하는 문제가 생깁니다. 그래서 파이어폭스의 버그라고밖에 할 수가 없답니다.

이 경우에는 다른 방법이 없어서.. 해결하기 위해 편법을 썼습니다.
소스를 보시면 아시겠지만, 해당 input에서는 maxlength를 200으로 잡아놓고 그 바로 다음에서 자바스크립트로 다시
50으로 세팅했답니다. input 태그의 파싱이 끝나자마자 디코딩은 끝난 상태이므로 그 태그의 바로 다음에서 50으로
설정하면 버그를 피해갈 수 있죠.

그럼...


BloodWolf 님이 쓰신 글 :
: 현재 FireFox 1.5를 사용중입니다.
: 그런데, 회원정보 수정 메뉴에서 이메일 입력 부분의 마지막 글자가 URL Encode 형태로 나타나네요.
:
: 화면 첨부합니다.

+ -

관련 글 리스트
436 회원정보 수정에서 이메일 입력 부분. BloodWolf 2609 2006/03/10
437     Re:회원정보 수정에서 이메일 입력 부분. 박지훈.임프 2825 2006/03/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.