CI 묻고 답하기

제목 검색시 #문자를 인식할려면
글쓴이 kimga 작성시각 2010/05/17 20:53:35
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 27241   RSS
CI에서 GET 스트링을 인식할수 있는 라이브러리를 설치후
#이 제대로 인식이 되지 않는것을 발견하였습니다.

검색할 단어에 #으로 시작되거나 하면 에러를 뿜어내더군요.
이곳 사이트에서도 #만으로 검색하니 스트링이 아예 존재하지 않는것으로 나옵니다.

이 부분을 해결할 방법이 있는지 궁금합니다.. 
 다음글 phpDesigner 사용자분들 단어단위 삭제 기능아시... (1)
 이전글 php 파일이 ?> 로 닫혀있지 않네요. (3)

댓글

변종원(웅파) / 2010/05/17 21:00:21 / 추천 0
기호부분은 검색어 넘길때 처리를 해서 넘기셔야 할겁니다. 
보안때문에 그럴겁니다. 

액티브레코드를 쓰신다면 당연히 처리가 되서 스트링 자체가 없어질테구요.

주소표시줄에도 마찬가지 입니다. (config.php 의 Allowed URL Characters 참고)

쿼리 날리실때 \# 정도 처리는 하셔야할듯 합니다.
kirrie / 2010/05/17 15:25:42 / 추천 0
다음은 uri와 관련된 rfc 문서의 일부분입니다.  ( http://www.ietf.org/rfc/rfc2396.txt )
   The angle-bracket "<" and ">" and double-quote (") characters are
   excluded because they are often used as the delimiters around URI in
   text documents and protocol fields.  The character "#" is excluded
   because it is used to delimit a URI from a fragment identifier in URI
   references (Section 4). The percent character "%" is excluded because
   it is used for the encoding of escaped characters.
말하자면 #은 uri schema 가운데서 특별한 목적을 가지고 있기 때문에 일반적인 문자열로 uri 내에서 사용될 수 없다는 의미입니다. (그 외 사용할 수 없는 몇개의 문자가 나옵니다.)

#는 흔히 anchor 태그에서 페이지 내의 위치를 지정하는 것으로 사용됩니다. 즉, 물리적인 자원과 대응하는 위치가 아니라 페이지 내에서만 의미를 갖는 한정된 식별자입니다.
그러므로 #을 사용하면 CI나 php가 아니라 아예 웹서버에서 그 뒷부분은 인식을 안해버립니다. #은 웹서버가 아니라 웹브라우져가 인식해야할 식별자기 때문입니다.

예를 들어서 index#page.html 파일을 만들어서 호출해보시면 잘 알 수 있을겁니다. 이 페이지는 404 에러를 냅니다. 분명히 파일은 있는데 말이죠. 실제로 리쿼스트와 리스폰스의 패킷을 떠보면 웹브라우져는 정상적으로

GET /index#page.html

페이지를 호출하는 반면에 웹서버는 # 뒷부분은 fragment idenfitier로 인식하고 index만 찾으려고 하기 때문에 파일을 찾을 수 없다는 에러를 내는 것을 확인할 수 있습니다.

결론은? ㅎㅎ 웅파님 말씀대로 처리를 따로 해서 넘겨야 합니다. base64_encode가 좋은 방법이죠.

kirrie / 2010/05/17 15:38:19 / 추천 0
http://tools.ietf.org/html/rfc5147
여기에 좀 더 자세한 내용이 있군요.