위키에서 검색 문제

자유 게시판

위키에서 검색 문제

전체글글쓴이: 김민식 » 2004-01-02 1:57 pm

또 다른 문제점입니다. 위키의 검색창에 'DbWiki 개선'을 입력하면 검색이 안 되고 깨진 이름의 페이지를 만들라고 합니다. 마지막 한 바이트(0xA0)가 잘려 나가는 것 같네요.
김민식
운영자
 
전체글: 40
가입일: 2003-12-28 3:55 am

골치아픈 문제네요...

전체글글쓴이: 류광 » 2004-01-02 3:38 pm

검색 문제는 아니고(그냥 검색 결과가 단 하나일 때 자동으로 그 페이지로 재지정하는 것일 뿐이구요) EUC-KR로 요청된 이름을 UTF-8로 바꾸는 부분에서 DbWiki 개선의 '개' 자가 이상하게 처리되기 때문인 것 같습니다.

EUC-KR을 UTF-8로 바꾸는 로직은 현재 이렇습니다....
코드: 모두 선택
   //$p = 원래 요청된 페이지 이름..

   $utf8name = @iconv("EUC-KR", "UTF-8", $p);
   if ($utf8name)
      return $utf8name;
   else
      return $p;


만일 $p를 EUC-KR에서 UTF-8로 변환할 수 있다면 $p는 원래 EUC-KR이었다는(UTF-8이 아니라) 가정에 기반한 것인데, '개'자에서는 그 가정이 깨지는 것 같습니다.

일단 이 변환 기능을 꺼버렸습니다. 해결책을 찾아봐야 겠습니다.
류광
사용자
 
전체글: 433
가입일: 2003-12-27 12:02 am

좀 비 효율적인 해결책....

전체글글쓴이: 류광 » 2004-01-02 3:51 pm

가정을 거꾸로 뒤집어서, UTF-8에서 EUC-KR로 변환할 수 없다면 EUC-KR이었던 거라고 로직을 바꿨습니다.
코드: 모두 선택
   if ([email protected]("UTF-8", "EUC-KR", $p) ) // EUC-KR 이름?
   {
      $utf8name = @iconv("EUC-KR", "UTF-8", $p);
      if ($utf8name)
         return $utf8name;
   }
   return $p;


이제 닥북 한국 위키 안에서 DbWiki 개선으로 걸리는 링크는 문제가 없습니다. 그러나 EUC-KR로 된 주소는 여전히 안 되네요...
류광
사용자
 
전체글: 433
가입일: 2003-12-27 12:02 am

개선안

전체글글쓴이: 김민식 » 2004-01-02 3:58 pm

류광 작성:가정을 거꾸로 뒤집어서, UTF-8에서 EUC-KR로 변환할 수 없다면 EUC-KR이었던 거라고 로직을 바꿨습니다.


비효율적인 것이 아니라 이 방향이 맞습니다. UTF-8 문자열은 EUC-KR로 해석해도 되는 경우가 많습니다만, EUC-KR 문자열이 UTF-8 문자열로도 해석되는 일은 거의 없거든요. 한글에 있어서는 EUC-KR의 코딩 효율이 UTF-8보다 좋기 때문에 나타나는 현상입니다. 다만 말씀하신 것처럼 하면 UTF-8로 EUC-KR이 커버하는 범위 밖의 글자를 썼을 경우에도 원래 EUC-KR이었던 걸로 판단하게 되니까, 결국 유니코드를 쓰는 장점을 잃어버리게 됩니다. UTF-8에서 UTF-16으로 변환해보고, 변환할 수 없으면 EUC-KR이었던 걸로 간주하면 어떨까요?
김민식
운영자
 
전체글: 40
가입일: 2003-12-28 3:55 am

전체글글쓴이: 류광 » 2004-01-03 2:05 pm

'개' 자가 문제가 아니었습니다. 영문 + Euc-kr 이면 무조건 안 되네요.

http://docbook.or.kr/wiki/index.php/%B0%B3%BC%B1 이건 되고

http://docbook.or.kr/wiki/index.php/a%B0%B3%BC%B1 이건 안 되고..

http://docbook.or.kr/wiki/index.php/%B4 ... F%EB%B9%FD 이건 되고

http://docbook.or.kr/wiki/index.php/bb% ... F%EB%B9%FD 이건 안되고....

iconv와 UTF에 대해 좀 더 공부를 해야겠습니다.
류광
사용자
 
전체글: 433
가입일: 2003-12-27 12:02 am

고쳐봤습니다.

전체글글쓴이: 김민식 » 2004-01-03 2:55 pm

php의 iconv가 변환이 가능한 곳까지 변환한 결과를 돌려주는군요. EUC-KR로 된 "a개선"을 UTF-8에서 EUC-KR로 변환하라고 하면 "a"만 돌려주네요. 그래서 if 블럭을 그냥 지나쳐 버리는 모양입니다. 다음과 같은 식으로 하면 될 것 같습니다. UTF-8로 간주하고 UTF-16으로 변환했다가 다시 UTF-8로 변환해서 원래 문자열과 같은지 비교하는 겁니다. PHP는 모르니 문법상 오류가 있으면 C 문법으로 해석해주세요. ;-)
코드: 모두 선택
$q = @iconv("UTF-8", "UTF-16", $p)
if (!($q) || $p != @iconv("UTF-16", "UTF-8", $q))
{
   $utf8name = @iconv("EUC-KR", "UTF-8", $p);
   if ($utf8name)
      return $utf8name;
}
return $p;
김민식
운영자
 
전체글: 40
가입일: 2003-12-28 3:55 am

와 됩니다...

전체글글쓴이: 류광 » 2004-01-03 3:30 pm

고맙습니다!!!

제시하신 코드 정확했습니다. 첫 문장 끝에 세미콜론만 추가했습니다. 이 참에 PHP를 본격적으로 공부하시면 어떨까요 :)

코드 손 보면서 아직 남아 있던 EUC-KR 문자열들도 UTF-8로 변경했습니다. 범용 블럭이나 목차 등에서 깨진 글자가 나오던 현상이 사라졌을 겁니다.... 또 닥북 소스 출력시 @ 옵션들을 제대로 인식하지 못하던 문제도 사라졌구요(역시 EUC-KR 문자열들 때문이었습니다.)
류광
사용자
 
전체글: 433
가입일: 2003-12-27 12:02 am

전체글글쓴이: 김민식 » 2004-01-04 6:18 pm

DbWiki가 점점 완벽해지네요. 그럼 이제 곧 1.0이 나오는 건가요? 8)
김민식
운영자
 
전체글: 40
가입일: 2003-12-28 3:55 am

전체글글쓴이: dyaus » 2004-01-06 11:32 am

dbwiki 1.0 rc1 p1 까지 나왔었군요..^^:

아..전 왜 1.0 이 나왔던 것으로 기억하고 있을까요 ^^:
dyaus
사용자
 
전체글: 8
가입일: 2004-01-02 5:22 pm

전체글글쓴이: 류광 » 2004-01-06 1:04 pm

1.0 생각하면 답답한데요...ㅠ.ㅠ 제 컴퓨터에 있는 버전이랑 DbWikiDev에 있는 거,
CVS에 있는 거, 그리고 여기에 있는거 다 다릅니다.-.- 입원하기 전까지는 앞의 세 개가
다 똑같았는데 여기 작업 하면서 여기서 시험해보고 저기서 조금 고치고 하면서 엉망이 되
었습니다.

어떻게 정리를 해야 할 지 암담한데 지금 기분으로는 그냥 DbWikiDev에서 돌아가고 있는
것을 정리해서 1.0으로 발표해버릴 가능성이 많습니다.

그런 후에.. 여기 작업의 성과를 정리해서 UTF-8을 선택할 수 있는 장치를 추가하고, 또
각주 또는 미주 기능을 추가해서 1.1을 발표하면 어떨까 상상만 하고 있습니다.
류광
사용자
 
전체글: 433
가입일: 2003-12-27 12:02 am

전체글글쓴이: 류광 » 2005-06-13 11:34 pm

혹시 관심있는 분을 위해 알려드리자면... DbWiki 1.0은 나왔고, 1.0에서는 좀 더 직접적인 방식으로 UTF-8 여부를 점검합니다. iconv 변환 결과에 의존하는 대신 그냥 바이트 구성을 직접 점검하는 식으로 바뀌었습니다.

http://kldp.net/cgi-bin/viewcvs.cgi/doc ... 11&r2=1.12 를 참고하세요...
류광
사용자
 
전체글: 433
가입일: 2003-12-27 12:02 am


다시 돌아감: 자유 게시판

접속 중인 사용자

이 포럼에 접속 중인 사용자: 접속한 회원이 없음 그리고 손님들 4 명

cron