CI 묻고 답하기

제목 검색 세그먼트 추가 후 페이징 링크 한글 URI 문제
글쓴이 우리모 작성시각 2012/07/20 11:07:22
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 28534   RSS
 안녕하세요.

검색 + 페이징 작업하다가 궁금한게 있어서 문의 드립니다.

현재 PHP4(EUC-KR), MYSQL4(EUC-KR), CI 1.7.3 config(UTF-8), 페이지 인코딩(UTF-8), 크롬으로 세팅 해놓고 사용중입니다.

Allowed URL Characters는 $config['permitted_uri_chars'] = '가-힣a-z 0-9~%.:_\-'; 이렇게 변경해놨구요.


링크 후에도 한글 세그먼트를 유지하고 싶은데 urlencode, base64 등등 써서 넘기면 다른 문자로 변경되서

변경하지 않고 세그먼트를 유지할 수 있는 방법이 있나요??


검색시 세그먼트 추가하고 마지막에 페이징을 붙여서 사용하고 있습니다.

검색 후에 한글도 잘 나오고 검색도 잘 되는데 페이징 링크(그냥 링크도 포함)를 타고 넘어가면 아래와 같이 변합니다.

% B0% F8% C1% BE% C5% C2

변경까지는 좋은데 링크가 연결되지 않을때가 있고 연결 될때가 있더라구요.

An Error Was Encountered

The URI you submitted has disallowed characters.

허용되지 않은 문자열이라는데 어디서 걸리는건지 잘 모르겠네요.

P.S : 웅파님 세그먼트 스크립트 잘 쓰고 있습니다 :)
P.S2 : 한글 깨진걸 적어놓으니까 밑부분이 없어졌네요 ㅠ_ㅠ

태그 깨짐,URI,한글,세그먼트,링크,검색
 다음글 크롬에서 새로고침시 세션을 마구찍어냅니다 (5)
 이전글 layout 질문드립니다. (1)

댓글

우리모 / 2012/07/20 11:12:03 / 추천 0
  % B0% F8% C1% BE% C5% C2 <- 이것때문에 몇번을 수정한건지.. ㅠ_ㅠ
변종원(웅파) / 2012/07/20 11:36:52 / 추천 0

포럼 주소 만드는 방식 잘 보시면 검색할때 form action의 주소에 검색어를 포함한 방식으로
전송을 합니다. 그러다보니 주소표시줄에서도 한글이 변환되지 않고 보여지구요.

한글이 utf-8로 유지가 되는지 보세요. 실제 검색할 때는 euc-kr로 변환이 되어야 하는데
브라우저 주소에서 바로 가져왔을때의 캐릭터셋과 검색시, 다시 링크를 만들때의 캐릭터셋을 비교해보세요.


에러 메시지 나올때 주소줄의 내용을 보시면 = 같은게 들어가 있을 수도 있습니다.
에러는 말 그대로 config에서 선언한 허용 문자 이외의 다른게 있을 때 나옵니다.

우리모 / 2012/07/20 12:44:00 / 추천 0
// 포럼 링크방식(view)
<a href="/<?= $lt['tbn'] ?>/view/<?= $lt['no'] ?>/page/<?=$page_account?>/<?=$search_url?><?=$search_sfl?>" title="<?= $bubble_title ?>">-<?= $bl1 ?><?= $this->
common->strcut_utf8(strip_tags($lt['subject']), 30) ?><?= $bl2 ?></a>

// 제가 사용하는 방식
// controller
$data['search_url'] .= "/orderId/".$this->uri->segment($arr_val); //검색갯수 + a
$data['paging_url'] = "/list/".$this->seg_exp[$arr_val];

// view
// ~ 생 략 ~
<td>
  <a href="<?php echo "[default_address]/page/".$row->id.$search_url.$paging_url; ?>"><?php echo $row->name; ?></a>
</td>
// ~ 생 략 ~
 포럼에서 사용하는 방식이랑 제가 사용하는 방식이랑 많이 다른데요. 지금 DB가 EUC-KR이지만 데이터는 UTF-8로 들어가 있어서 DB에서 보면 다 깨져보이네요;;
 그리고 iconv('UTF-8', 'EUC-KR', $url) 해보면 글씨가 다이아몬드로 깨져서 보이네요. 한글이 퍼센트16진수로 나오는걸 바꿨거든요.

[default_address]/page/13/member_id/% C0% FC% BF% B5% B5% B5
에러메시지 나왔을때의 URI 인데 선언한 허용문자에 다 들어있는 문자임에도 불구하고 안나와서요.
그냥  $config['permitted_uri_chars'] = '';  이렇게 바꿔서 사용해야 할까요??
우리모 / 2012/07/20 13:23:22 / 추천 0
 <?php echo $_SERVER['PHP_SELF']; ?>
이렇게 쓰면 깨지지 않고 페이지에 표시도 되고 주소창에도 아름답게(?) 한글로 표시되고 있습니다.

링크를 생성할 경우 세그먼트를 붙여서 이동하면 퍼센트16진수로 변경되면서 에러가 뜨네요.
ci_chobo / 2012/07/25 16:12:08 / 추천 0
우리모님

이 문제 혹시 해결하셨나요 ?

검색할때 한글로 넘기면 님처럼 저도 16진수로만 뜨더라구요..
우리모 / 2012/08/03 12:33:39 / 추천 0
 ci_chobo님

일단 개발일정 때문에 밀려서 미뤄논 상태구요.

해결하게 되면 추가적으로 달아놔야겠네요.

구글 검색하니 제 글이 맨처음 올라오는걸 보니 많은 분들이 검색해보신듯.. =ㅅ=ㅋ
우리모 / 2012/08/03 14:11:34 / 추천 0
검색하시는 분들께 도움이 되고자 저의 해결방법을 남겨놉니다.

일단 기본적으로 주소는 urlencode되어 작업되기 때문에 < 요 형태로 변경이 됩니다.

현재 모든 세팅은 UTF-8로 통일을 한 상태이며 

 - URL에 한글이 보이도록 한건 그대로 출력하였기 때문이고,
 - 검색이나 폼에서 사용하게 될 경우는 urldecode를 사용해서 해결했습니다.

urldecode 상태 : (00 = 16진수)
EUC-KR - UTF-8 깨진 경우 : <?><?><?> <- 특수문자로 깨져서 나옴
UTF-8 - EUC-KR 깨진 경우 : 뷁궭훩 <- 이상한 한글로 깨져서 나옴

웅파님 감사합니다 :)