2008年5月14日 星期三

《 PHP 》擷取中文字串發生的斷字問題


  1. big5 編碼字串


  2. //擷取字串前幾個字並避免截掉半個中文字,$strlen要擷取的字串長度
    function CuttingStr($str,$strlen) {
    if(strlen($str) > $strlen) {
    for($i=0;$i<$strlen;$i++) {
    $ch=substr($str,$i,1);
    if(ord($ch)>127) $i++;
    }
    $str= substr($str,0,$i);
    }
    return $str;
    }



  3. utf-8 編碼字串


  4. //擷取字串前幾個字並避免截掉半個中文字,$strlen要擷取的字串長度(以英文字母數計算,中文字需算二個字數)
    //此處直接傳入從資料庫讀出之UTF-8編碼字串
    function CuttingStr($str, $strlen) {
    //把' '先轉成空白
    $str = str_replace(' ', ' ', $str);

    $output_str_len = 0; //累計要輸出的擷取字串長度
    $output_str = ''; //要輸出的擷取字串

    //逐一讀出原始字串每一個字元
    for($i=0; $i //擷取字數已達到要擷取的字串長度,跳出回圈
    if($output_str_len >= $strlen){
    break;
    }

    //取得目前字元的ASCII碼
    $str_bit = ord(substr($str, $i, 1));

    if($str_bit < 128) {
    //ASCII碼小於 128 為英文或數字字符
    $output_str_len += 1; //累計要輸出的擷取字串長度,英文字母算一個字數
    $output_str .= substr($str, $i, 1); //要輸出的擷取字串

    }elseif($str_bit > 191 && $str_bit < 224) {
    //第一字節為落於192~223的utf8的中文字(表示該中文為由2個字節所組成utf8中文字)
    $output_str_len += 2; //累計要輸出的擷取字串長度,中文字需算二個字數
    $output_str .= substr($str, $i, 2); //要輸出的擷取字串
    $i++;

    }elseif($str_bit > 223 && $str_bit < 240) {
    //第一字節為落於223~239的utf8的中文字(表示該中文為由3個字節所組成的utf8中文字)
    $output_str_len += 2; //累計要輸出的擷取字串長度,中文字需算二個字數
    $output_str .= substr($str, $i, 3); //要輸出的擷取字串
    $i+=2;

    }elseif($str_bit > 239 && $str_bit < 248) {
    //第一字節為落於240~247的utf8的中文字(表示該中文為由4個字節所組成的utf8中文字)
    $output_str_len += 2; //累計要輸出的擷取字串長度,中文字需算二個字數
    $output_str .= substr($str, $i, 4); //要輸出的擷取字串
    $i+=3;
    }
    }

    //要輸出的擷取字串為空白時,輸出原始字串
    return ($output_str == '') ? $str : $output_str;
    }



  5. 使用 PHP5 新增加的函式


  6. //取得 utf-8 編碼的字串長度,這裡共 8 個字
    echo iconv_strlen('無標題文件abc', 'utf-8');
    //取得 utf-8 編碼的子字串,指定 從 0 開始取 20個字,結果是 "無標題文件1無標題文件2無標題文件3無標"
    echo iconv_substr('無標題文件1無標題文件2無標題文件3無標題文件4無標題文件5', 0, 20, 'utf-8');


2008年4月19日 星期六

《 Adobe 》Prepare to be a Flasher

Flash 和 ActionScript 對我來說都是剛開啟起步而已

整理了一下我認為玩好 Flash 需要的幾個技巧和工具:

  1. SWFObject: Javascript Flash Player detection and embed script
    • 官方網站:http://blog.deconcept.com/swfobject/
    • 我記得曾經用過這個 JavaScript 來裝 SWF,現在雖然找不到那作品。好東西當然要分享啦,況且在James' fantasy 的部落格文章中看到說 IE ActiveX 有啥米技術問題存在著,看來這 code 會對 Flasher有很大的幫助喔!
    • 使用說明:在網頁裡面輸入這些喔,不要忘記加一個<div id="flashcontent"></div>給 JavaScript 中的Flash使用捏~


      <script type="text/javascript" src="swfobject.js"></script>

      <div id="flashcontent">
      This text is replaced by the Flash movie.
      </div>

      <script type="text/javascript">
      var so = new SWFObject("movie.swf", "mymovie", "400", "200", "8", "#336699");
      so.write("flashcontent");
      </script>


  2. Sothink SWF Decompiler
    • 官方網站:http://www.sothink.com/product/flashdecompiler/download.htm
    • 說明:可以將 SWF 轉成 FLA,至於其他用法我就不清楚了,但是如果要把 ActionScript 也轉出來,可能不行的樣子,至少我試了的結果是如此,可能還要在觀察一下喔。
    • 我記得神魂顛倒是個正當的大站,但是出現了這個文章可以下載這軟體(可能要小聲的說吧!不然會被 OOXX.....)
  3. OOP Languages
    • 對於學過物件導向語言的人來說,可以馬上進入狀況,這點我到是蠻喜歡的耶,雖然我不是學的很好,但是 Flash 跟網頁一樣"所見即所的"效果,讓我想要墮入他的愛河(咦,我回高雄了啊?哈哈 :) )
    • 因為 Adobe Flash CS3 和 ActionScript 語言的進化,使得程式人可以掌握更深,美工者可能就開始卻步,不怎麼準啦,因為每個人不一樣咩,努力就好啦。

最近沒發什麼文章,潛在 Flash 3D Engine 的懷抱中,改天一定要打筆記給打來。另外,我還要去加強美工的技巧,嗚嗚....對我來說有點難度

希望下一篇會是 ActionScript 成果分享,上次說得 YWE 已經轉換戰場了,我想應該是暫停研究吧,等轉戰到 RIA 之時在一起拿出來玩玩看囉。