public function big5ToUTF8($word) { if (is_null(self::$_maps)) { $fp = fopen(__DIR__ . '/big5uni.txt', 'r'); self::$_maps = array(); while (false !== ($line = fgets($fp))) { if (0 === strpos($line, '#')) { continue; } list($big5, $utf8) = explode(' ', trim($line), 2); $utf8_word = html_entity_decode("&#" . hexdec($utf8) . ";"); self::$_maps[hexdec($big5) / 256][hexdec($big5) % 256] = $utf8_word; } fclose($fp); } $chars = unpack('C2', $word); return self::$_maps[$chars[1]][$chars[2]]; }
public function searchByKeyword($word) { $params = array(); $params['method'] = 'query'; $params['otherEnterFlag'] = 'false'; $params['useEUC'] = 'N'; $params['isShowEUC'] = 'Y'; $params['queryKey'] = 'sed4871'; $params['selCmpyType'] = 1; $params['selQueryType'] = 1; $params['queryStr'] = iconv('utf-8', 'big5', $word); $params['brBanNo'] = ''; $params['imageCode'] = 'jretd'; $params['imageFileName'] = 'oxQ22Z.jpg'; $tmpfile = tempnam('', ''); $url = 'http://gcis.nat.gov.tw/pub/cmpy/cmpyInfoListAction.do'; $curl = curl_init(); if (getenv('PROXY_URL')) { curl_setopt($curl, CURLOPT_PROXY, getenv('PROXY_URL')); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); curl_setopt($curl, CURLOPT_REFERER, $url); curl_setopt($curl, CURLOPT_COOKIEFILE, $tmpfile); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $params); curl_setopt($curl, CURLOPT_URL, $url); $content = curl_exec($curl); $content = Big52003::iconv($content); preg_match_all('#banNo=([0-9]{8})#', $content, $matches); $ids = $matches[1]; preg_match('#([0-9]*) 頁 #', $content, $matches); $total = intval($matches[1]); for ($i = 2; $i <= $total; $i++) { sleep(1); curl_setopt($curl, CURLOPT_COOKIEFILE, $tmpfile); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_REFERER, 'http://gcis.nat.gov.tw/pub/cmpy/branInfoListAction.do'); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, 'isShowEUC=Y&otherEnterFlag=false&queryKey=sed4871&useEUC=N&method=goPage&goPage=' . $i); $content = curl_exec($curl); $content = Big52003::iconv($content); preg_match_all('#banNo=([0-9]{8})#', $content, $matches); $ids = array_merge($ids, $matches[1]); } unlink($tmpfile); return array_values(array_unique($ids)); }