月份彙整: 2008 年 10 月

20081023程式修改紀錄

修改台語相關的 mfont.php與 tmfont.php ,處理台羅編碼聲調符號標示的位置。

 引用 iconv_strlen() 函數來取代以往切割字串用的方式,parse 出所有的母音,並加上響度weighting

決定聲調符號標示的位置。順便將整個程式改成 unicode,並且加入第九調。

20081018程式修改報告

我看以後做了什麼還是來報告一下,不然要每週進度報告都會不知道說啥。

修正了網頁產生器,解決最新文章會出現雜訊的問題。

修正了公佈欄跑馬燈,讓系統更穩定一點,不過目前還有點小問題,因為我無法判定視窗的高度,所以不知道捲動的終點,先用固定值混一下

20081029,已經知道怎麼算高度

document.documentElement.clientHeight  計算視窗高度

document.links.length  計算連結筆數,就可以計算出捲動的狀況

匯出CBOL資料成 insert 格式

修正新約parsing輸入流程,並協助修改資料

 

php的 iconv 繁簡轉換文字不出來問題解法

php的iconv是個非常好用的函數,可以輕易達成繁簡體轉碼的功能, 但是這個函數有個缺點,當我們輸入「【囧男孩】為什麼你要一直笑呢?」這段字,由於 「囧」這個字不是gb2312支援的字,結果整個輸出會變成「【」,後面的字串全部會消失,而且 php端沒有任何錯誤信息(return也不會變成 false)。

為了解決這個問題,我用了轉回來的字串長度作為檢驗標竿,看看轉回來的字串是否正確,如果不正確,就用二分逼近法,先把正確的部份轉出來,把不正確的部份用遞迴方式繼續切割下去轉,最後把那個造成問題的字換成「?」,這樣就解決了問題。

 <?php
function trangb($str)
 {
        $nstr=iconv(‘utf-8′,’big5’,$str);
        if (iconv_strlen($str,’utf-8′)!=iconv_strlen($nstr,’big5′))
                $nstr=riconv(‘utf-8′,’big5’,$str);
        $pnstr=iconv(‘big5′,’gb2312’,$nstr);
        if (iconv_strlen($nstr,’big5′)!=iconv_strlen($pnstr,’gb2312′))
                $pnstr=riconv(‘big5′,’gb2312’,$nstr);
        $nstr= iconv(‘gb2312′,’utf-8’,$pnstr);
        return $nstr;
 }
function riconv($loc1,$loc2,$str)
{
    $i=iconv_strlen($str,$loc1);
    if ($i<=1)
        return ‘?’;
    $blen=(int)($i/2);
    $elen=$i-$blen;
    $bstr=iconv_substr($str,0,$blen,$loc1);
    $nbstr=iconv($loc1,$loc2,$bstr);
    if (iconv_strlen($bstr,$loc1)!=iconv_strlen($nbstr,$loc2))
        $nbstr=riconv($loc1,$loc2,$bstr);
    $estr=iconv_substr($str,$blen,$elen,$loc1);
    $nestr=iconv($loc1,$loc2,$estr);
    if (iconv_strlen($estr,$loc1)!=iconv_strlen($nestr,$loc2))
        $nestr=riconv($loc1,$loc2,$estr);
    return $nbstr.$nestr;
}
echo trangb("【囧男孩】為什麼你要一直笑呢?");
?>