KLDP BBS 검색하기가 조금 힘드네요.

freezm7의 이미지

항상 검색 하고 나면 별 상관 없는 주제들이 뜨곤 했습니다.

그 때마다, 제가 키워드 선정을 잘못해서 그런가 보다하고 넘겼는데...

검색창 예제로 나와있는 "메일 and root"로 검색했을 때,
검색 결과 중 첫번째인 "하드디스크 속도가 잘 안나옵니다."라는 주제를 클릭해보면,

"root"라는 단어는 포함하고 있지만, "메일"이라는 단어는 없더군요.

검색 루틴에 문제가 있는 것일까요?

File attachments: 
첨부파일 크기
Image icon kldp2.jpg136.81 KB
Image icon kldp1.jpg151.86 KB
Prentice의 이미지

검색 루틴에 약간 문제가 있긴 있는 것 같습니다. "카지"로 검색하면 뜨는 http://bbs.kldp.org/viewtopic.php?t=5511&highlight=%C4%AB%C1%F6 이 문서에는 "카지"라는 말이 없습니다.

권순선의 이미지

음....문제가 있나 보군요. 혹시 다른 phpbb 사이트에서도 동일한 문제가 발생하는지 확인해 보고 이번 주말 CodeFest에서 함께 테스트/디버깅해 볼 수 있도록 하겠습니다....

권순선의 이미지

고친 것 같습니다. CodeFest 에서 중요한 성과가 있었네요. :-)

잘 되는지 확인해봐 주시고 문제가 있으면 알려 주세요....

cdpark의 이미지

검색도 잘 되게 고쳤으니 메인 화면에 잘 보이게 배치해주세요.

KLDP Wiki (검색)
------------ ------

KLDP BBS (검색)
------------ -----

식으로 검색으로 바로가는 링크를 만들죠?

정태영의 이미지

권순선 wrote:
고친 것 같습니다. CodeFest 에서 중요한 성과가 있었네요. :-)

뭐가 문제였나요 +_+!?

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

권순선의 이미지

cdpark wrote:
검색도 잘 되게 고쳤으니 메인 화면에 잘 보이게 배치해주세요.

KLDP Wiki (검색)
------------ ------

KLDP BBS (검색)
------------ -----

식으로 검색으로 바로가는 링크를 만들죠?


흠...디자인이 조금 복잡해지지 않을까 하는 생각이 드는데... 굳이 초기화면에 넣을 필요까지는 없을 것 같은데요. 개별 사이트에 대한 검색을 넣을 거라면 다른 사이트들도 모두 넣어야 할텐데 보기도 별로 안좋을것 같고요...
권순선의 이미지

정태영 wrote:
권순선 wrote:
고친 것 같습니다. CodeFest 에서 중요한 성과가 있었네요. :-)

뭐가 문제였나요 +_+!?


검색 스트링을 sql로 db에 넘기는 부분을 binary로 선언해 주었더니 잘 되네요~
fibonacci의 이미지

CodeFest 의 성과과 바로 나오는군요 +_+

No Pain, No Gain.

정태영의 이미지

흠 근데.. 한글의 경우 검색어로 한글을 주면..
그 단어가 하일라이팅이 안되는 듯 싶네요 +_+

highlight 하기 전에.. 검색어를.. url_decode해주면 해결될 듯 싶은데요..

p.s) 혹시 검색문제 해결 관련된 패치를 받을 순 없을까요 :D

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

권순선의 이미지

정태영 wrote:
흠 근데.. 한글의 경우 검색어로 한글을 주면..
그 단어가 하일라이팅이 안되는 듯 싶네요 +_+

highlight 하기 전에.. 검색어를.. url_decode해주면 해결될 듯 싶은데요..

p.s) 혹시 검색문제 해결 관련된 패치를 받을 순 없을까요 :D


고친 것은 아주 간단합니다. 검색할 문자열 앞에 binary만 넣었습니다.

urldecode부분은 시간이 나면 한번 살펴 보겠습니다...

kss@kldp:/kldp/bbs$ diff search.php search.php.0717
287c287
<                                                               WHERE w.word_text LIKE BINARY '$match_word'
---
>                                                               WHERE w.word_text LIKE '$match_word'
298c298
<                                                               WHERE post_text LIKE BINARY '$match_word'
---
>                                                               WHERE post_text LIKE '$match_word'
kss@kldp:/kldp/bbs$
angpoo의 이미지

root: 검색 결과 2926 개 일치합니다
ROOT: 검색 결과 302 개 일치합니다

영문의 경우는 대소문자 구분없이 검색이 되는게 좋을텐데요.

binary로 지정했더니 검색결과가 달라진것이라면
binary를 빼서 예전으로 되돌리고
my.cnf에서 default-character-set을 euc_kr로 지정하면 될듯합니다.
Mysql 버전이 4.1.*이면 euckr로 지정하고
ALTER DATABASE 'xxx' DEFAULT CHARACTER SET euckr
ALTER TABLE 'xxx' DEFAULT CHARACTER SET euckr

권순선의 이미지

angpoo wrote:
root: 검색 결과 2926 개 일치합니다
ROOT: 검색 결과 302 개 일치합니다

영문의 경우는 대소문자 구분없이 검색이 되는게 좋을텐데요.

binary로 지정했더니 검색결과가 달라진것이라면
binary를 빼서 예전으로 되돌리고
my.cnf에서 default-character-set을 euc_kr로 지정하면 될듯합니다.
Mysql 버전이 4.1.*이면 euckr로 지정하고
ALTER DATABASE 'xxx' DEFAULT CHARACTER SET euckr
ALTER TABLE 'xxx' DEFAULT CHARACTER SET euckr


지금 사용중인 mysql은 다음과 같습니다.

Quote:
kss@kldp:/kldp/bbs$ mysql --version
mysql Ver 11.16 Distrib 3.23.49, for pc-linux-gnu (i686)

여기서도 동일하게 사용할 수 있나요??

angpoo의 이미지

권순선 wrote:
지금 사용중인 mysql은 다음과 같습니다.

Quote:
kss@kldp:/kldp/bbs$ mysql --version
mysql Ver 11.16 Distrib 3.23.49, for pc-linux-gnu (i686)

여기서도 동일하게 사용할 수 있나요??

3.23.x라면 my.cnf에
[mysqld]
default-character-set=euc_kr
해주고 리부팅 하면 적용이 됩니다.

mysql> show variables like 'character_sets';
하면 지원되는 캐릭터셋을 확일 할 수 있습니다.
배포본을 사용했다면 기본적으로 euc_kr이 포함되어 컴파일되어 있습니다.

codebank의 이미지

$message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace('#(" . $highlight_match . ")#i', '<span style=\"color:#" . $theme['fontcolor3'] . "\"><b>\\\\1</b></span>', '\\0')", '>' . $message . '<'), 1, -1));

문제의 viewtopic.php의 1103번째줄입니다.
원래 \b가 포함되어있는데 이것은 영어 word기준으로 찾기위한 조치같다고 합니다.
한글에서는 조사도 있기때문에...
현재로서는 저렇게 하는것이 최선인것 같고 차후 영문과 한글 구분후에 적절한 조치를
취하는게 좋을 것 같습니다. :)

P.S. : 문제해결은 cwryu님이 해주셨습니다. 고맙습니다.

------------------------------
좋은 하루 되세요.

hun98의 이미지

간단한 버그 한가지 더... ^^;

심각한건 아니구요..

이미지 갤러리란에.. 이미지 첨부하면
이미지 크기 사이즈 줄여서 게시물보기에 나오는거 맞죠?(어떻게 구현했는지 궁금하네요) 그리고 이미지 클릭하면 원래 이미지 크기로 나오고...

그런데 수정모드에서 이미지 추가하면 원래 이이지가 그대로 출력됩니다.

angpoo의 이미지

phpbb중 제일 보기 싫은것중 하나가 종종 과도하게 긴 url이 사용되어
폭이 과도 하게 넓어지는 경우인데 표시되는 부분을 좀 줄였으면 합니다.

includes/bbcode.php의 make_clickable()을 preg_replace_callback을 사용하도록 수정하고 function replace_clickable()을 추가했습니다.

includes/bbcode.php

function replace_clickable($matches)
{
  $url = $matches[2];
  if (isset($matches[3])) {
    $url = ($matches[3] == "ftp" ? "ftp://" : "http://") . $url; 
  }
  $urlname = strlen($matches[2]) > 100 ? substr($matches[2], 0, 98) . "..." : $matches[2];
  return $matches[1] . "<a href=\"$url\" target=\"_blank\">$urlname</a>";
}
 
function make_clickable($text)
{
 
        // pad it with a space so we can match things at the start of the 1st line.
        $ret = ' ' . $text;

        // matches an "xxxx://yyyy" URL at the start of a line, or after a space.
        // xxxx can only be alpha characters.
        // yyyy is anything up to the first space, newline, comma, double quote or <
//      $ret = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
        $ret = preg_replace_callback("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", replace_clickable, $ret);

        // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
        // Must contain at least 2 dots. xxxx contains either alphanum, or "-"
        // zzzz is optional.. will contain everything up to the first space, newline, 
        // comma, double quote or <.
//      $ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
        $ret = preg_replace_callback("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", replace_clickable, $ret);

        // matches an email@domain type address at the start of a line, or after a space.
        // Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
        $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);

        // Remove our padding..
        $ret = substr($ret, 1);

        return($ret);
}

권순선의 이미지

codebank wrote:
$message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace('#(" . $highlight_match . ")#i', '<span style=\"color:#" . $theme['fontcolor3'] . "\"><b>\\\\1</b></span>', '\\0')", '>' . $message . '<'), 1, -1));

문제의 viewtopic.php의 1103번째줄입니다.
원래 \b가 포함되어있는데 이것은 영어 word기준으로 찾기위한 조치같다고 합니다.
한글에서는 조사도 있기때문에...
현재로서는 저렇게 하는것이 최선인것 같고 차후 영문과 한글 구분후에 적절한 조치를
취하는게 좋을 것 같습니다. :)

P.S. : 문제해결은 cwryu님이 해주셨습니다. 고맙습니다.


감사합니다... 방금 적용하였습니다. 역시 codefest에서의 성과가 바로 나타나네요. 하이라이트 부분은 제가 문제를 좀 들여다 보다가 포기하고 바로 앞자리에 계시던 codebank님께 바톤을 넘겼는데 정규표현식 부분에서 또 근처에 계시던 cwryu님의 도움으로 바로 해결할 수 있었습니다. 메일이나 irc 등으로 이야기했더라면 이번처럼 한시간 안에 해결하기는 좀 힘들었겠지요. :-)
권순선의 이미지

angpoo wrote:
phpbb중 제일 보기 싫은것중 하나가 종종 과도하게 긴 url이 사용되어
폭이 과도 하게 넓어지는 경우인데 표시되는 부분을 좀 줄였으면 합니다.

includes/bbcode.php의 make_clickable()을 preg_replace_callback을 사용하도록 수정하고 function replace_clickable()을 추가했습니다.

includes/bbcode.php

function replace_clickable($matches)
{
  $url = $matches[2];
  if (isset($matches[3])) {
    $url = ($matches[3] == "ftp" ? "ftp://" : "http://") . $url; 
  }
  $urlname = strlen($matches[2]) > 100 ? substr($matches[2], 0, 98) . "..." : $matches[2];
  return $matches[1] . "<a href=\"$url\" target=\"_blank\">$urlname</a>";
}
 
function make_clickable($text)
{
 
        // pad it with a space so we can match things at the start of the 1st line.
        $ret = ' ' . $text;

        // matches an "xxxx://yyyy" URL at the start of a line, or after a space.
        // xxxx can only be alpha characters.
        // yyyy is anything up to the first space, newline, comma, double quote or <
//      $ret = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
        $ret = preg_replace_callback("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", replace_clickable, $ret);

        // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
        // Must contain at least 2 dots. xxxx contains either alphanum, or "-"
        // zzzz is optional.. will contain everything up to the first space, newline, 
        // comma, double quote or <.
//      $ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
        $ret = preg_replace_callback("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", replace_clickable, $ret);

        // matches an email@domain type address at the start of a line, or after a space.
        // Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
        $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);

        // Remove our padding..
        $ret = substr($ret, 1);

        return($ret);
}


감사합니다... 방금 수정 하였습니다. 문제가 되었던 예제 게시물을 가지고 한번 테스트해 보시고 결과를 알려 주시면 좋겠습니다.

다음번 CodeFest때는 angpoo님도 오시면 많은 일이 짧은 시간 안에 이루어질 수 있을 것 같군요. :-)

angpoo의 이미지

http://bbs.kldp.org/viewtopic.php?t=40896 를 보면 중간에
http://www.donkeyhote.co.kr/bbs/zboard.php?id=humor&page=2&sn1=&divpage=3&sn=off&ss=on&sc=off&select_arrange=headnum&desc=asc&no=13121
였던것이
http://www.donkeyhote.co.kr/bbs/zboard.php?id=humor&page=2&sn1=&divpage=3&sn=off&a...
이렇게 표시됩니다.
근데 100도 좀 긴듯 하네요. 이왕이면 90으로 줄여주셨으면 좋겠습니다.
그러면 firefox 1024크기에서 sidebar에 sage를 띄우고도 폭이 안 넓어지겠네요.
100으로 하니 약간 넘칩니다.

그리고 전부터 생각했던건데
이런 얘기를 비롯해서 KLDP자체에 대한 얘기를 할 수 있는 게시판이 따로 있었으면 좋겠습니다.

권순선의 이미지

angpoo wrote:
http://bbs.kldp.org/viewtopic.php?t=40896 를 보면 중간에
http://www.donkeyhote.co.kr/bbs/zboard.php?id=humor&page=2&sn1=&divpage=3&sn=off&ss=on&sc=off&select_arrange=headnum&desc=asc&no=13121
였던것이
http://www.donkeyhote.co.kr/bbs/zboard.php?id=humor&page=2&sn1=&divpage=3&sn=off&a...
이렇게 표시됩니다.
근데 100도 좀 긴듯 하네요. 이왕이면 90으로 줄여주셨으면 좋겠습니다.
그러면 firefox 1024크기에서 sidebar에 sage를 띄우고도 폭이 안 넓어지겠네요.
100으로 하니 약간 넘칩니다.

그리고 전부터 생각했던건데
이런 얘기를 비롯해서 KLDP자체에 대한 얘기를 할 수 있는 게시판이 따로 있었으면 좋겠습니다.


90으로 줄였습니다. 그리고 건의사항이랄까...사이트 자체에 대해서 논의할 것은 이곳 자유게시판에서 하시면 됩니다. bbs 초기화면의 설명을 보면

Quote:
자유 게시판
살아가는 이야기, 테스트, 건의사항...
관리자 KLDP BBS 관리자 그룹

라고 되어 있죠? :-)

owlet의 이미지

하루동안 올라온 글을 보기위해서 검색한계날짜 1일로하고 "*"로 검색 후
검색된 게시물을 보려고 하니 한글이 다 깨져버리네요.

댓글 첨부 파일: 
첨부파일 크기
Image icon 0바이트
Image icon 0바이트
권순선의 이미지

며칠 전에 바꾼 viewtopic.php 때문에 생기는 문제로군요. 기존의 것으로 테스트해 보았는데 문제가 없었습니다. 좀더 살펴봐야 할 것 같네요...

codebank의 이미지

권순선 wrote:
며칠 전에 바꾼 viewtopic.php 때문에 생기는 문제로군요. 기존의 것으로 테스트해 보았는데 문제가 없었습니다. 좀더 살펴봐야 할 것 같네요...

저도 방금 확인해봤는데...
제가 수정한 부분에서 나온것같더군요. :oops:
전체검색은 생각도 안하고 있었는데... '*'가 들어갔을때 모든 단어를 변환시켜버리니
그런 현상이 생기는군요.
잠시 테스트 해봐야겠네요. 쩝...

------------------------------
좋은 하루 되세요.

codebank의 이미지

일단 '*'가 들어간 것에 대한 부분을 찾아봤습니다.
특이하게 내부에서 '*'를 '%2A'라는 형태로 변화를 시키더군요.
(이유는 잘모르겠지만... 아마 encoding을 하면서 변화된듯...)
수정방법은
if ($highlight != '%2A')
이부분을 이전에 변화시킨 라인위에 써주기만하면 됩니다.
아~ 이것도 임시 땜빵이겠지만요... :oops:

아직 PHP와 정규식에 능숙한게 아니라서 임시적인 형태밖에는 조언이 안되는군요.

------------------------------
좋은 하루 되세요.

권순선의 이미지

일단 codebank님이 말씀하신 대로 집어 넣었습니다~ :-)

angpoo의 이미지

권순선 wrote:
angpoo wrote:

근데 100도 좀 긴듯 하네요. 이왕이면 90으로 줄여주셨으면 좋겠습니다.
그러면 firefox 1024크기에서 sidebar에 sage를 띄우고도 폭이 안 넓어지겠네요.
100으로 하니 약간 넘칩니다.

90으로 줄였습니다.

function replace_clickable($matches) {
...
$urlname = strlen($matches[2]) > 90? substr($matches[2], 0, 88) . "..." : $matches[2];
...
}
90으로 줄여는데도 그대로 인것을 보면 뒤의 숫자는 안고치셨나보네요.
한번더 부탁드립니다.
한번에 끝낼 수도 있는걸로 여러번 수고를 끼치네요.
권순선의 이미지

angpoo wrote:
권순선 wrote:
angpoo wrote:

근데 100도 좀 긴듯 하네요. 이왕이면 90으로 줄여주셨으면 좋겠습니다.
그러면 firefox 1024크기에서 sidebar에 sage를 띄우고도 폭이 안 넓어지겠네요.
100으로 하니 약간 넘칩니다.

90으로 줄였습니다.

function replace_clickable($matches) {
...
$urlname = strlen($matches[2]) > 90? substr($matches[2], 0, 88) . "..." : $matches[2];
...
}
90으로 줄여는데도 그대로 인것을 보면 뒤의 숫자는 안고치셨나보네요.
한번더 부탁드립니다.
한번에 끝낼 수도 있는걸로 여러번 수고를 끼치네요.

아닙니다...제가 잘 몰라서 대충 고치느라 빼먹었었네요. 지금 고쳤습니다. :-)
dhunter의 이미지

콜백 처리에 깔끔해보여서 제로보드에 기존의 Autolink 대신에 써보려고 했는데, HTML 이 섞이는 제로보드여서 그런지 링크 인식이 극도로 나빠서 포기했습니다.

제로보드의 preg 조건식은"/([^\"\'\=])(mms|http|HTTP|ftp|FTP|telnet|TELNET)\:\/\/(.[^ \n\<\"\'\)]+)/"
이고
이 PhpBB 개선 소스에서는
"#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is"
인데 그렇게 차이가 날만큼 큰 요소였을까요?

from bzImage
It's blue paper