bold_search.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. <?php
  2. //查询参考字典
  3. require_once '../path.php';
  4. require_once '../public/casesuf.inc';
  5. require_once '../public/union.inc';
  6. require_once "../public/_pdo.php";
  7. require_once "../public/function.php";
  8. require_once "../public/load_lang.php";
  9. _load_book_index();
  10. $op=$_GET["op"];
  11. $word=mb_strtolower($_GET["word"],'UTF-8');
  12. $org_word=$word;
  13. $count_return=0;
  14. global $PDO;
  15. switch($op){
  16. case "pre"://预查询
  17. $dictFileName=_FILE_DB_REF_INDEX_;
  18. PDO_Connect("sqlite:$dictFileName");
  19. echo "<div>";
  20. $query = "select word,count from dict where \"eword\" like ".$PDO->quote($word.'%')." OR \"word\" like ".$PDO->quote($word.'%')." limit 0,20";
  21. $Fetch = PDO_FetchAll($query);
  22. $iFetch=count($Fetch);
  23. if($iFetch>0){
  24. for($i=0;$i<$iFetch;$i++){
  25. $word=$Fetch[$i]["word"];
  26. $count=$Fetch[$i]["count"];
  27. echo "<div class='dict_word_list'>";
  28. echo "<a href='bold.php?key={$word}'>$word-$count</a>";
  29. echo "</div>";
  30. }
  31. }
  32. echo "</div>";
  33. break;
  34. case "search":
  35. $strDictTab="<li id=\"dt_dict\" class=\"act\" onclick=\"tab_click('dict_ref','dt_dict')\">{$_local->gui->dict}</li>";
  36. //查黑体字开始
  37. $arrBookName=json_decode(file_get_contents("../public/book_name/sc.json"));
  38. echo "<div id=\"dict_bold\" style=''>";
  39. //加语尾
  40. $arrNewWord=array();
  41. for ($row = 0; $row < count($case); $row++) {
  42. $len=mb_strlen($case[$row][0],"UTF-8");
  43. $end=mb_substr($word, 0-$len,NULL,"UTF-8");
  44. if($end==$case[$row][0]){
  45. $newWord=mb_substr($word, 0,mb_strlen($word,"UTF-8")-$len,"UTF-8").$case[$row][1];
  46. $arrNewWord[$newWord]=1;
  47. }
  48. }
  49. //加连读词尾
  50. $arrUnWord=array();
  51. for ($row = 0; $row < count($union); $row++) {
  52. $len=mb_strlen($union[$row][0],"UTF-8");
  53. foreach($arrNewWord as $x=>$x_value){
  54. $end=mb_substr($x, 0-$len,NULL,"UTF-8");
  55. if($end==$union[$row][0]){
  56. $newWord=mb_substr($x, 0,mb_strlen($x,"UTF-8")-$len,"UTF-8").$union[$row][1];
  57. $arrUnWord[$newWord]=1;
  58. }
  59. }
  60. }
  61. //将连读词和$arrNewWord混合
  62. foreach($arrUnWord as $x=>$x_value){
  63. $arrNewWord[$x]=1;
  64. }
  65. if(count($arrNewWord)>0){
  66. $strQueryWord="(";
  67. foreach($arrNewWord as $x=>$x_value) {
  68. $strQueryWord.="'{$x}',";
  69. }
  70. $strQueryWord=mb_substr($strQueryWord, 0,mb_strlen($strQueryWord,"UTF-8")-1,"UTF-8");
  71. $strQueryWord.=")";
  72. }
  73. else{
  74. $strQueryWord="('{$word}')";
  75. }
  76. $dictFileName=_FILE_DB_BOLD_;
  77. PDO_Connect("sqlite:$dictFileName");
  78. //查询符合的记录数
  79. $query = "select count(*) as co from bold where \"word2\" in $strQueryWord";
  80. $Fetch = PDO_FetchOne($query);
  81. if($Fetch>0){
  82. $strDictTab.="<li id=\"dt_bold\" onclick=\"tab_click('dict_bold','dt_bold')\">{$_local->gui->vannana}({$Fetch})</li>";
  83. echo "{$_local->gui->search}:$word {$_local->gui->find_about}{$Fetch}{$_local->gui->result}<br />";
  84. //黑体字主显示区开始
  85. echo "<div class='dict_bold_main'>";
  86. //黑体字主显示区左侧开始
  87. echo "<div class='dict_bold_left'>";
  88. echo "<button onclick=\"dict_update_bold(0)\">".$_local->gui->filter."</button>";
  89. /*查找实际出现的拼写
  90. $strQueryWord中是所有可能的拼写
  91. */
  92. $realQueryWord="(";
  93. $query = "select word2,count(word) as co from bold where \"word2\" in $strQueryWord group by word2 order by co DESC";
  94. $Fetch = PDO_FetchAll($query);
  95. $iFetch=count($Fetch);
  96. if($iFetch>0){
  97. echo "<div>";
  98. echo "<input id='bold_all_word' type='checkbox' checked='true' value='' onclick=\"dict_bold_word_all_select()\"/>{$_local->gui->all_select}<br />";
  99. for($i=0;$i<$iFetch;$i++){
  100. $realQueryWord.="'{$Fetch[$i]["word2"]}',";
  101. echo "<input id='bold_word_{$i}' type='checkbox' checked value='{$Fetch[$i]["word2"]}' />";
  102. echo "<a onclick=\"dict_bold_word_select({$i})\">";
  103. echo $Fetch[$i]["word2"].":".$Fetch[$i]["co"]."{$_local->gui->times}<br />";
  104. echo "</a>";
  105. }
  106. $realQueryWord=mb_substr($realQueryWord, 0,mb_strlen($realQueryWord,"UTF-8")-1,"UTF-8");
  107. $realQueryWord.=")";
  108. echo "<input id='bold_word_count' type='hidden' value='{$iFetch}' />";
  109. echo "</div>";
  110. }
  111. //查找这些词出现在哪些书中
  112. $query = "select book,count(word) as co from bold where \"word2\" in $realQueryWord group by book order by co DESC";
  113. $Fetch = PDO_FetchAll($query);
  114. $iFetch=count($Fetch);
  115. if($iFetch>0){
  116. echo "<div id='bold_book_list'>";
  117. echo "{$_local->gui->presented_in}{$iFetch}{$_local->gui->book}:<br />";
  118. echo "<input type='checkbox' checked='true' value='' />{$_local->gui->all_select}<br />";
  119. for($i=0;$i<$iFetch;$i++){
  120. $book=$Fetch[$i]["book"];
  121. $bookname=_get_book_info($book)->title;
  122. echo "<input id='bold_book_{$i}' type='checkbox' checked value='{$book}'/>";
  123. echo "<a onclick=\"dict_bold_book_select({$i})\">";
  124. echo "《{$bookname}》:{$Fetch[$i]["co"]}{$_local->gui->times}<br />";
  125. echo "</a>";
  126. }
  127. echo "<input id='bold_book_count' type='hidden' value='{$iFetch}' />";
  128. echo "</div>";
  129. }
  130. //查找这些词出现在哪些书中结束
  131. echo "</div>";
  132. //黑体字主显示区左侧结束
  133. //黑体字主显示区右侧开始
  134. echo "<div id=\"dict_bold_right\" style='flex:7;'>";
  135. //前20条记录
  136. $query = "select * from bold where \"word2\" in $realQueryWord limit 0,20";
  137. $Fetch = PDO_FetchAll($query);
  138. $iFetch=count($Fetch);
  139. if($iFetch>0){
  140. $dictFileName=_FILE_DB_PALITEXT_;
  141. PDO_Connect("sqlite:$dictFileName");
  142. for($i=0;$i<$iFetch;$i++){
  143. $paliword=$Fetch[$i]["word"];
  144. $book=$Fetch[$i]["book"];
  145. $bookInfo=_get_book_info($book);
  146. $bookname=$bookInfo->title;
  147. $bookPath=$bookInfo->c1.">".$bookInfo->c2.">".$bookInfo->c3;
  148. $paragraph=$Fetch[$i]["paragraph"];
  149. $base=$Fetch[$i]["base"];
  150. $pali=$Fetch[$i]["pali"];
  151. echo "<div class='dict_word'>";
  152. echo "<div class='book' ><span style='font-size:110%;font-weight:700;'>《{$bookname}》</span> <tag>$bookInfo->c1</tag> <tag>$bookInfo->c2</tag> </div>";
  153. echo "<div style='font-size: 130%;font-weight: 700;'>$paliword</div>";
  154. if(strlen($pali)>1){
  155. echo "<div class='mean'>$pali</div>";
  156. }
  157. else{
  158. $dictFileName=_FILE_DB_PALITEXT_;
  159. PDO_Connect("sqlite:$dictFileName");
  160. $query = "select * from pali_text where \"book\" = '{$book}' and \"paragraph\" = '{$paragraph}' limit 0,20";
  161. $FetchPaliText = PDO_FetchAll($query);
  162. $countPaliText=count($FetchPaliText);
  163. if($countPaliText>0){
  164. for($iPali=0;$iPali<$countPaliText;$iPali++){
  165. $path="";
  166. $parent = $FetchPaliText[0]["parent"];
  167. $deep=0;
  168. $sFirstParentTitle="";
  169. while($parent>-1){
  170. $query = "select * from pali_text where \"book\" = '{$book}' and \"paragraph\" = '{$parent}' limit 0,1";
  171. $FetParent = PDO_FetchAll($query);
  172. if($sFirstParentTitle==""){
  173. $sFirstParentTitle = $FetParent[0]["toc"];
  174. }
  175. $path="{$FetParent[0]["toc"]}>{$path}";
  176. $parent = $FetParent[0]["parent"];
  177. $deep++;
  178. if($deep>5){
  179. break;
  180. }
  181. }
  182. $path=$bookPath.$path."No. ".$paragraph;
  183. echo "<div class='mean' style='font-size:120%;'><a href='../reader/?view=para&book={$book}&para={$paragraph}&display=para' target='_blank'>$path</a></div>";
  184. if(substr($paliword,-1)=="n"){
  185. $paliword=substr($paliword,0,-1);
  186. }
  187. $htmlPara=str_replace(".0","。0",$FetchPaliText[$iPali]["html"]);
  188. $aSent=str_getcsv($htmlPara,".");
  189. $aSentInfo=array();
  190. $aBold=array();
  191. echo "<div class='wizard_par_div'>";
  192. foreach($aSent as $sent){
  193. //array_push($aSentInfo,false);
  194. //array_push($aBold,false);
  195. if(stristr($sent,$paliword)){
  196. echo "<span>{$sent}.</span><br>";
  197. // $aSent[$i]=str_replace($paliword,"<hl>{$paliword}</hl>",$aSent[$i]);
  198. //$aSentInfo[$i]=true;
  199. }
  200. //if(stristr($aSent[$i],"bld")){
  201. //$aBold[$i]=true;
  202. //}
  203. }
  204. echo "</div>";
  205. /*
  206. $output="";
  207. $bold_on=false;
  208. for($i=0;$i<count($aSent);$i++){
  209. if($aBold[$i]){
  210. if($aSentInfo[$i]){
  211. $output.=$aSent[$i]."<br>";
  212. $bold_on=true;
  213. }
  214. else{
  215. echo "<div>{$output}</div>";
  216. $output="";
  217. $bold_on=false;
  218. }
  219. }
  220. else{
  221. if($bold_on){
  222. echo "<div>{$aBold[$i]}</div>";
  223. }
  224. }
  225. }
  226. */
  227. //$light_text=str_replace($paliword,"<hl>{$paliword}</hl>",$FetchPaliText[$iPali]["vri_text"]);
  228. //$light_text=str_replace(".",".<br />",$light_text);
  229. //echo "<div class='wizard_par_div'>{$light_text}</div>";
  230. }
  231. }
  232. }
  233. echo "<div class='search_para_tools'></div>";
  234. echo "</div>";
  235. }
  236. }
  237. echo "</div>";
  238. //黑体字主显示区右侧结束
  239. echo "</div>";
  240. //黑体字主显示区结束
  241. }
  242. echo "</div>";
  243. //查黑体字结束
  244. break;
  245. case "update":
  246. $target=$_GET["target"];
  247. switch($target){
  248. case "bold";
  249. $arrBookName=json_decode(file_get_contents("../public/book_name/sc.json"));
  250. $dictFileName=_FILE_DB_BOLD_;
  251. PDO_Connect("sqlite:$dictFileName");
  252. $wordlist=$_GET["wordlist"];
  253. $booklist=$_GET["booklist"];
  254. $aBookList=ltrim($booklist,"(");
  255. $aBookList=rtrim($aBookList,")");
  256. $aBookList=str_replace("'","",$aBookList);
  257. $aBookList=str_getcsv($aBookList);
  258. foreach($aBookList as $oneBook){
  259. $aInputBook["{$oneBook}"]=1;
  260. }
  261. //查找这些词出现在哪些书中
  262. $query = "select book,count(word) as co from bold where \"word2\" in $wordlist group by book order by co DESC";
  263. $Fetch = PDO_FetchAll($query);
  264. $iFetch=count($Fetch);
  265. if($iFetch>0){
  266. echo "<div id='bold_book_list_new'>";
  267. echo "出现在{$iFetch}本书中:<br />";
  268. echo "<input id='bold_all_book' type='checkbox' checked onclick=\"dict_bold_book_all_select()\" />全选<br />";
  269. for($i=0;$i<$iFetch;$i++){
  270. $book=$Fetch[$i]["book"];
  271. $bookname=$arrBookName[$book-1]->title;
  272. if(isset($aInputBook["{$book}"])){
  273. $bookcheck="checked";
  274. }
  275. else{
  276. $bookcheck="";
  277. }
  278. echo "<input id='bold_book_{$i}' type='checkbox' $bookcheck value='{$book}'/>";
  279. echo "<a onclick=\"dict_bold_book_select({$i})\">";
  280. echo "《{$bookname}》({$Fetch[$i]["co"]})<br />";
  281. echo "</a>";
  282. }
  283. echo "<input id='bold_book_count' type='hidden' value='{$iFetch}' />";
  284. echo "</div>";
  285. }
  286. //查找这些词出现在哪些书中结束
  287. //前20条记录
  288. if($booklist=="()"){
  289. echo "<div>请选择书名</div>";
  290. }
  291. $query = "select * from bold where \"word2\" in $wordlist and \"book\" in $booklist limit 0,20";
  292. $Fetch = PDO_FetchAll($query);
  293. $iFetch=count($Fetch);
  294. if($iFetch>0){
  295. for($i=0;$i<$iFetch;$i++){
  296. $paliword=$Fetch[$i]["word"];
  297. $book=$Fetch[$i]["book"];
  298. $bookname=$arrBookName[$book-1]->title;
  299. $c1=$arrBookName[$book-1]->c1;
  300. $c2=$arrBookName[$book-1]->c2;
  301. $bookPath = "$c1>$c2";
  302. $paragraph=$Fetch[$i]["paragraph"];
  303. $base=$Fetch[$i]["base"];
  304. $pali=$Fetch[$i]["pali"];
  305. echo "<div class='dict_word'>";
  306. echo "<div class='book' ><span style='font-size:110%;font-weight:700;'>《{$bookname}》</span> <tag>$c1</tag> <tag>$2</tag> </div>";
  307. echo "<div class='mean'>$paliword</div>";
  308. if(strlen($pali)>1){
  309. echo "<div class='mean'>$pali</div>";
  310. }
  311. else{
  312. $dictFileName=_FILE_DB_PALITEXT_;
  313. PDO_Connect("sqlite:$dictFileName");
  314. $query = "select * from pali_text where \"book\" = '{$book}' and \"paragraph\" = '{$paragraph}' limit 0,20";
  315. $FetchPaliText = PDO_FetchAll($query);
  316. $countPaliText=count($FetchPaliText);
  317. if($countPaliText>0){
  318. for($iPali=0;$iPali<$countPaliText;$iPali++){
  319. $path="";
  320. $parent = $FetchPaliText[0]["parent"];
  321. $deep=0;
  322. $sFirstParentTitle="";
  323. while($parent>-1){
  324. $query = "select * from pali_text where \"book\" = '{$book}' and \"paragraph\" = '{$parent}' limit 0,1";
  325. $FetParent = PDO_FetchAll($query);
  326. if($sFirstParentTitle==""){
  327. $sFirstParentTitle = $FetParent[0]["toc"];
  328. }
  329. $path="{$FetParent[0]["toc"]}>{$path}";
  330. $parent = $FetParent[0]["parent"];
  331. $deep++;
  332. if($deep>5){
  333. break;
  334. }
  335. }
  336. $path="<span>{$bookPath}>{$path} No. {$paragraph}</span>";
  337. //echo "<div class='mean'>$path</div>";
  338. echo "<div class='mean' style='font-size:120%;'><a href='../reader/?view=para&book={$book}&para={$paragraph}&display=para' target='_blank'>$path</a></div>";
  339. if(substr($paliword,-1)=="n"){
  340. $paliword=substr($paliword,0,-1);
  341. }
  342. $light_text=str_replace($paliword,"<hl>{$paliword}</hl>",$FetchPaliText[$iPali]["html"]);
  343. $light_text=str_replace(".",".<br /><br />",$light_text);
  344. echo "<div class='wizard_par_div'>{$light_text}</div>";
  345. }
  346. }
  347. }
  348. echo "<div class='search_para_tools'></div>";
  349. echo "</div>";
  350. }
  351. }
  352. break;
  353. }
  354. break;
  355. }
  356. ?>