CI 묻고 답하기

제목 URL에 한글 사용하는 방법 질문 입니다!
글쓴이 마PD 작성시각 2015/07/30 16:59:33
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 17830   RSS
안녕하세요!

검색을 해봤지만 해결이 되지 않아 이렇게 따로 질문글을 올립니다. ㅠ.ㅠ

원하는 기능은 이렇습니다.

test.com 으로 접속하면 메인화면
test.com/[검색단어] 으로 접속하면 검색 단어에 따르는 내용으로 페이지를 변경해서 보여줍니다.

즉, 사용자가 url에 직접 검색어를 입력하되 get방식처럼 id=[검색단어] 형식이 아니라 주소에 / 이후 바로 검색어를 넣도록 하고 싶습니다.
단, [검색단어]에는 한글, 영문, 숫자, 띄어쓰기만 사용 가능하며 그외에 특수문자-_등은 사용하지 않습니다.

이렇게 하기 위해 다음과 같은 작업들을 진행했습니다.

1. .htaccess 를 통해 url 에서 index.php 부분을 제거하였습니다.
2. routes.php 에서 다음과 같이 수정하였습니다.
$route['([가-힣a-z0-9]+)'] = "main/test/$1";
$route['default_controller'] = "main";
$route['404_override'] = '';

이렇게하자 영문과 숫자를 넣었을땐 정상 작동하였습니다.
test.com/abcd
test.com/1234

하지만 한글과 숫자를 사용하니 페이지를 찾을 수 없다고 나왔습니다.
그래서 검색을 해보니 config.php 파일에서 이렇게 수정하라고 되어 있더라구요.
$config['permitted_uri_chars'] = '가-힣a-z 0-9~%.:_\-';

하지만 위처럼 수정하였음에도 불구하고 페이지는 여전히 찾을 수 없다고 나옵니다.

config.php 파일에는 UTF-8로 설정하였고 필요하다면 아직 제작 초기 단계라 다른걸로도 변경은 가능합니다.

이후 구현될 기능은 입력받은 값을 DB에서 검색 후 결과를 보여주는 겁니다.

URL에서 한글을 사용하여 라우팅 시킬 수 있는 방법이 있을까요?
 다음글 오라클 연동 질문좀드릴게요. (2)
 이전글 프레임워크가 갑자기 먹통.. (4)

댓글

ci개밟자 / 2015/07/30 17:38:22 / 추천 0
그냥 가-힣 하시고 (:any) 만 하셔도 됩니다

$route['(:any)'] = "main/test";

$1 에 대해선 모르겠네요. $1 은안해도 세그먼트는 받을수 있을겁니다
마PD / 2015/07/30 17:58:18 / 추천 0
답변 감사합니다 :)
:any 를 하지 않은 이유는, 필요에 따라 다른 페이지를 로딩해야해서 그렇습니다.

[검색단어]에 쓰이지 못하는 특수문자를 이용해서..
_help
_board
_mail
같은 컨트롤을 만들어서 작동시켜야해서요

test.com/[검새단어]  : 검색 결과
test.com/_board/1 : 1번 게시판
test.com/_mail/test : test에게 메일

이런식입니다....
흐헝~ 한글은 힘든걸까요? ㅠㅠ
마PD / 2015/07/30 18:00:32 / 추천 0
....아!

$route['_mail'] = "mail";
$route['(:any)'] = "main/test/$1";
$route['default_controller'] = "main";
$route['404_override'] = '';

이렇게하면 우선순위(?)에 따라서 _mail 인지 여부를 먼저 체크하고 그 다음으로 넘어가니까 ... 되겠네요?!?
오옹!!!!!!

감사합니다!!!!!
마PD / 2015/07/30 18:50:04 / 추천 0
자문자답입니다.

위 방법으로 당장의 문제 해결은 가능하였지만..
다른 컨트롤러를 사용할때마다 라우팅 설정을 해줘야하는게 너무 번거로워서 더 검색을 해보고 (역시 영어 검색이 ㅠㅠ 구글신) 해결 방법을 찾았습니다.

$route['([가-힣a-z0-9A-Z%]+)'] = "main/test/$1";

라우팅 최상단에 이렇게 넣어주시면 url형식(?)으로 인코딩된 값들을 인식하게 되어서 띄어쓰기와 한글을 전부 인식해주네요!