001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
<?php // (2022.8.28, 차재복, Cha Jae Bok, http://www.ktword.co.kr) //** 공통으로 쓰일 수 있는 사용자 정의 함수들 모음 ** # 내용 중에 `[ ... ]` 등 특정 쌍(pair) delimiter 사이 내부 텍스트를 `없애기` 또는 `교체하기` 또는 `감쌈(배열[2])` function pair_delimiter($rest,$left,$right,$replace='') { $right_pos=0; while ( ($left_pos=strpos($rest,$left,$right_pos))!==false and ($right_pos=strpos($rest,$right,$left_pos))!==false ) { $left_str = substr($rest,0,$left_pos); $right_str = substr($rest,$right_pos+strlen($right)); $middle_str = substr($rest,$left_pos,$right_pos-$left_pos+strlen($right)); if (empty($replace)) { // 제거 $replaced_str = ''; } else if (!empty($replace) and !is_array($replace)) { // 교체 $replaced_str = $replace; } else if (is_array($replace) and count($replace)==2) { // 감쌈 $replaced_str = $replace[0].$middle_str.$replace[1]; } else { return $rest; } $rest = $left_str . $replaced_str . $right_str; $right_pos = $left_pos + strlen($replaced_str); } return $rest; } # 용어해설 첫부분 요약 추출 function synopsis_extract($str) { $str = mb_substr($str,3,200,'utf-8'); // 200자 제한 $erase_arr = ["\r\n","\r","\n","'",'"',">"," "]; // 불필요 문자들 $str = str_replace($erase_arr," ",$str); // 불필요 문자들 제거 (공백 교체) $str = pair_delimiter($str,"<a ","</a>"); // a 태그 제거 return $str; } # 최근 용어해설 수정 3건 보여주기 function recent_word_updated($dbi) { $query = "select *,date_format(sujung,'%c월%e일') as day from cjb_dict order by sujung desc limit 3"; $result = mysqli_query($dbi, $query); if (mysqli_errno($dbi)) { echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n"; } $recent_words = ''; while ($matched=mysqli_fetch_assoc($result)) { $array_y = explode(",",$matched['yako']); $array_k = explode(",",$matched['korean']); if (count(array_filter($array_y)) > 0) $word = array_shift($array_y); else if (count(array_filter($array_k)) > 0) $word = array_shift($array_k); // 함수 pair_delimiter() if (strpos(getcwd(),'\\test\\') !== false or strpos(getcwd(),'/test/') !== false) include_once "../base_utils/common_utils.php"; else include_once "../test/base_utils/common_utils.php"; $word = pair_delimiter($word,'[',']'); // 최근 편집용어 출력 $recent_words .= " "; $recent_words .= "<a href=/test/view/view.php?no=$matched[no]>"; $recent_words .= $word; $recent_words .= "</a>"; // 편집날짜 // $recent_words .= "({$matched['day']})"; } return $recent_words; } # 최근 소스 수정 3건 보여주기 function recent_src_updated($dbi, $srcView='') { $query = "select dir,filename,date_format(date,'%c월%e일') as day from src_files order by date desc limit 3"; $result = mysqli_query($dbi,$query); if (mysqli_errno($dbi)) {echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";} $recent_src = ''; while ($matched=mysqli_fetch_assoc($result)){ $recent_src .= " "; if(empty($srcView)){ $recent_src .= $matched[filename]; } else { $recent_src .= "<a href='/test/open_src/view_src.php?dir={$matched['dir']}&file={$matched['filename']}' class='src_view'>"; $recent_src .= $matched['filename']; $recent_src .= "</a>"; } $recent_src .= '('.$matched['day'].')'; } return $recent_src; } # 알파벳 선택 (알파벳별 편집용 1 또는 검색용 2) function alphabet_choice_v2($type) { $letters = "가나다라마바사아자차카타파하ABCDEFGHIJKLMNOPQRSTUVWXYZ數"; switch ($type) { // 편집용 화면에 쓰일 때 case 1 : echo "<button id='word_select'>" . "\n"; echo "용어 선택" . "\n"; echo "</button>" . "\n"; echo "<select>" . "\n"; for($i=0; $i<mb_strlen($letters);$i++) { $letter = mb_substr($letters,$i,1); echo "<option value='{$i}'>{$letter}</option>" . "\n"; } echo "</select>" . "\n"; break; // 검색용 화면에 쓰일 때 case 2 : for($i=0; $i<mb_strlen($letters);$i++) { $letter = mb_substr($letters,$i,1); if($letter=='A') echo "<br><br>" . "\n"; echo "<a href='' class='words' data-no='{$i}'>{$letter}</a> " . "\n"; } echo "<br><br>" . "\n"; echo "<span id='word_out'></span>" . "\n"; break; } } # 용어 해설,분류 총 건수 function word_statistics($dbi) { // 용어해설 총 건수 : $word_num $query = "select * from cjb_dict"; $result = mysqli_query($dbi, $query); if (mysqli_errno($dbi)) {echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";} $word_num = mysqli_num_rows($result); // 분류항목 건수 : $gubun_num $query = "select * from gubun_tree_v2"; $result = mysqli_query($dbi, $query); if (mysqli_errno($dbi)) {echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";} $gubun_num = mysqli_num_rows($result); return array('word_num'=>$word_num, 'gubun_num'=>$gubun_num); } # 용어 명칭 콤머(,) 구분 리스트 출력 function wordListComma($yako,$korean,$full_name,$extra) { $name = (empty($yako) ? '' : $yako.', ') .(empty($korean) ? '' : $korean.', ') .(empty($full_name) ? '' : $full_name.', ') .(empty($extra) ? '' : $extra); $name = str_replace(',',', ',$name); $name = str_replace(' ',' ',$name); $name = pair_delimiter($name,'[',']'); $name = str_replace(' ,',',',$name); if(substr($name,-2)==', ') $name = substr($name,0,strlen($name)-2); return $name; }