CI 묻고 답하기

제목 한글 검색 시 에러 문제
글쓴이 powe 작성시각 2015/03/13 09:34:08
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 19837   RSS
환경은 IIS 8.5이며 URL 재작성 모듈 사용 중입니다. 
그리고 config.php에 
$config['permitted_uri_chars'] = '가힣a-z 0-9~%.:_\-';
$config['permitted_uri_chars'] = '';
2개 다 테스트 해보았습니다. 

이 상태에서 한글 검색을 하면 
 
An Error Was Encountered

The URI you submitted has disallowed characters.

라고 뜨게 됩니다. 

소스는 웅파님 책을 구매해서 거기 소스를 참고 했으며, 제가 작성한 소스 보여드리겠습니다. 

URL은 ~/cscenter/search/q/검색어와 같이 이루어집니다.

view
 
				<script>
					// $(document).ready(function(){
					// 	$("#search_btn").click(function(){
						function testing() {
							// if($("#q").val() == ''){
							// 	bootbox.alert('검색어를 입력해주세요.');
							// 	return false;
							// } else {
								var con = encodeURIComponent($("#q").val());
								// var act = '/customer_support/search/q/'+$("#q").val(); 
								var act = '/customer_support/search/q/'+con; 
								$("#scanForm").attr('action', act).submit();
							// }
						}
					// 	});
					// });

				</script>

controller
 
$this -> load -> view('main/top');
$this->output->enable_profiler(TRUE);

$word2 =  $this->uri->segment(4);


echo $word2;



$config = array();
$config['base_url'] = '/cscentert/search/q/'.$word; 
$config["total_rows"] = $this->cs_model->gets_lists_record_count();
$config["per_page"] = 10;
$config["uri_segment"] = 5;
$config['num_links'] = 4;
$config['full_tag_open'] = "<ul class='pagination pagination-lg'>";
$config['full_tag_close'] ="</ul>";
$config['num_tag_open'] = '<li>';
$config['num_tag_close'] = '</li>';
$config['cur_tag_open'] = "<li class='disabled'><li class='active'><a href='#'>";
$config['cur_tag_close'] = "<span class='sr-only'></span></a></li>";
$config['next_tag_open'] = "<li>";
$config['next_tagl_close'] = "</li>";
$config['prev_tag_open'] = "<li>";
$config['prev_tagl_close'] = "</li>";
$config['first_link'] = '처음';
$config['first_tag_open'] = "<li>";
$config['first_tagl_close'] = "</li>";
$config['last_link'] = '끝';
$config['last_tag_open'] = "<li>";
$config['last_tagl_close'] = "</li>";

$this->pagination->initialize($config);

$page = ($this->uri->segment(5)) ? $this->uri->segment(5) : 0;
$data["results"] = $this->customer_support_model->gets_lists($config["per_page"], $page);
$data["links"] = $this->pagination->create_links();
$this -> load -> view('/cscentert/search' , $data);
$this -> load -> view('main/tail');


입니다. 

view에서 jquery로
encodeURIComponent 하고 controller에서 받아도 마찬가지로 
An Error Was Encountered

The URI you submitted has disallowed characters.
가 뜨게 됩니다. 

그래서 생각을 해본게 base64 ?로 보내고 controller에서 다시 푸는 방식도 생각을 해봤는데
jquery로 base64 하는 방식도 잘 모르겠고(github에 외부 플러그인이 있긴했습니다만..) 

그래도 php로 해결을 해보고 싶어서 문의글 드립니다. 
 

 다음글 CodeIgniter 3.0에서 database 로드 ... (4)
 이전글 route에서 @로 시작할수 없나요? (1)

댓글

변종원(웅파) / 2015/03/13 09:43:37 / 추천 0
캐릭터셋 관련 옵션을 비운 상태라면 그 에러가 나오지않아야 정상입니다. config.php에서의 캐릭터셋과 파일의 캐릭터셋이 맞는지 확인해보세요.
powe / 2015/03/13 09:51:46 / 추천 0
우선 케릭터셋 관련 옵션을 비우면 빈 화면만 나오게 됩니다. 
if 케릭터 옵션 == ''
1. 한글 검색 시 빈 화면만 나온다. 
2. 한글이 아닌 영/숫자로 검색을 하면 정상적으로 결과 값이 보인다. 

그리고 config.php 의 charset은 UTF-8 파일의 charset도 UTF-8 입니다. 
powe / 2015/03/13 10:03:32 / 추천 0
@@추가 

config.php에서 케릭터 옵션 비운 상태에서 한글 검색을 하게 되면 빈 화면이 나오는데 
controller에서 echo $word;  echo var_dump($word);  (검색어) 를 하면 한글이 그대로 찍히네요. 

기능이 동작을 안하는건지 코드상에 문제가 있는지 에러메시지가 안나오니 이유를 모르겠네요. 

[index.php 에서 define('ENVIRONMENT', 'development'); 상태인데도 에러메시지가 안나오니 이거 어디가 잘못되었는지 감이 안오네요]
 
한대승(불의회상) / 2015/03/13 10:27:37 / 추천 0
조금 걸리는 부분이
$config['permitted_uri_chars'] = '가힣a-z 0-9~%.:_\-';

으로 되어 있는데 "가힣" 을 "가-힣" 으로 바꿔 보세요.
경험상 아직까지 2.2.0 까지는 "가-힣" 추가 하는걸로 아무런 문제가 없었습니다.
powe / 2015/03/13 10:32:07 / 추천 0
@한대승님 - 그 부분 오타네요. 코드에서는 정상적으로 가-힣으로 들어가있습니다. ^^;
변종원(웅파) / 2015/03/13 10:46:24 / 추천 0
영문은 나오고 한글은 안나오면 모델쪽(db) 문제입니다.

db는 mssql 이신가요? euc-kr?
powe / 2015/03/13 10:59:08 / 추천 0
@웅파님 / mysql 이며, euc-kr 입니다. 
변종원(웅파) / 2015/03/13 11:07:16 / 추천 0
소스 및 캐릭터셋은 utf-8 이고 mysql은 euc-kr이면 변환해서 검색을 하셔야 합니다.
ci세상 / 2015/03/13 12:44:17 / 추천 0
참고글주소 우리모님 최종 댓글중~
http://cikorea.net/qna/view/7045/page/5