bold_search.php 19 KB

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