<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>        <title><![CDATA[馳騁在風的國度]]></title>
        <link><![CDATA[http://tw.myblog.yahoo.com/waian-950604]]></link>
        <description><![CDATA[澎湖是風的故鄉，而我就像是一匹馬，在無垠的國度裡馳騁！時而優雅踱步，時而疾奔如風...。]]></description>
  <lastBuildDate>Sun, 30 Nov 2008 01:50:38 +0800</lastBuildDate>
        <language>zh-tw</language>         <item>
            <title><![CDATA[ASCII 92許蓋餐問題的解決方案]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1636]]></link>
            <description><![CDATA[<table cellSpacing="5" cellPadding="5" width="100%" border="0">
<tbody>
<tr>
<td colSpan="2"><strong>問題說明</strong></td></tr>
<tr>
<td colSpan="2">　如果您的 MySQL character set 採用「big5」的話，它本身能辨識雙位元文字，那麼以下的內容是您必須要注意的。</td></tr>
<tr>
<td colSpan="2">　BIG5 碼系統為兩位元組之內碼系統，共可定義 19782 個字碼。其高、低位元組的範圍如下：</td></tr>
<tr>
<td colSpan="2">　高位元組：0x81 ～ 0xFE（ASCII 129 ～ 254）</td></tr>
<tr>
<td colSpan="2">　低位元組：0x40 ～ 0x7E 與 0xA1 ～ 0xFE（ASCII 64 ～ 126 與 161 ～ 254）</td></tr>
<tr>
<td colSpan="2">　在許多程式語言之中，ASCII 92（&#92;）被當作是跳脫（escape）字元，在程式中需要輸出特定字元時，先加上 &#92;，才能被系統所辨識出來。例如：在指定字串變數值時，<strong>$Str = &quot;PHP 是一種程式語言&quot;</strong>，前後都會用到 <strong>&quot;</strong> 這個字元，如果希望在字串中使用 &quot; 的話，則可以這麼寫：<strong>$Str = &quot;&#92;&quot;PHP&#92;&quot; 是一種程式語言&quot;</strong>。如此一來，「PHP」前後的雙引號就可以被視為字串的一部份了。</td></tr>
<tr>
<td colSpan="2">　問題就出在這裡！假如使用者在文字框中輸入「成功」二字，我們來看看傳到伺服器端的資料是什麼（以下一併顯示中文與十六進位的 ASCII 碼）：</td></tr>
<tr>
<td colSpan="2">　使用者端傳送：成（A6 A8）功（A5 <strong>5C</strong>）</td></tr>
<tr>
<td colSpan="2">　伺服器端接收：成（A6 A8）功（A5 <strong>5C 5C</strong>）</td></tr>
<tr>
<td colSpan="2">　有什麼不同？「功」字的後半部是 5C，轉成十進位是 92，剛好就是上述的跳脫字元。為了正確地傳送此一字串，PHP 會自動在該字元之前多加個 &#92;。</td></tr>
<tr>
<td colSpan="2">　顯示在畫面上的是「成功&#92;」，只是有點礙眼，沒啥影響。如果要存入資料庫的話，問題就來了：</td></tr>
<tr>
<td colSpan="2">　$SQL = &quot;INSERT INTO mytable VALUES (&#39;$Str&#39;);&quot;;</td></tr>
<tr>
<td colSpan="2">　對資料庫而言，它將收到一個這樣的命令：</td></tr>
<tr>
<td colSpan="2">　INSERT INTO mytable VALUES (&#39;成功&#92;&#39;);</td></tr>
<tr>
<td colSpan="2">　原本「成功」前後的單引號是用來標示字串的，但後面那個單引號加上 &#92; 之後，就被視為字串的一部份，而該命令就少了一個單引號了。不正確的命令，當然不能期待它會產生正確的執行結果。</td></tr>
<tr>
<td colSpan="2"><br><img hspace="3" src="http://chensh.loxa.edu.tw/php/media/dot_b1.gif" align="absMiddle"/> <strong>我的做法</strong></td></tr>
<tr>
<td colSpan="2">　只要可供使用者輸入文字的元件（如 Text、Textarea...），都需要經過下列函數的過濾，才能組成對資料庫執行存取動作的 SQL 敘述句。</td></tr>
<tr>
<td bgColor="#e5f6fc" colSpan="2">01&nbsp;&nbsp;&nbsp;&nbsp;function Fix_Backslash($org_str) {<br>02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( mysql_client_encoding() != &quot;big5&quot; ) return $org_str;<br><br>03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmp_length = strlen($org_str);<br><br>04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( $tmp_i=0; $tmp_i&lt;$tmp_length; $tmp_i++ ) {<br>05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ascii_str_a = substr($org_str, $tmp_i , 1);<br>06&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ascii_str_b = substr($org_str, $tmp_i+1, 1);<br><br>07&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ascii_value_a = ord($ascii_str_a);<br>08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ascii_value_b = ord($ascii_str_b);<br><br>09&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( $ascii_value_a &gt; 128 ) {<br>10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( $ascii_value_b == 92 ) {<br>11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$org_str = substr($org_str, 0, $tmp_i+2) . substr($org_str,$tmp_i+3);<br>12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmp_length = strlen($org_str);<br>13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmp_i++;<br>15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmp_length = strlen($org_str);<br>18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( substr($org_str, ($tmp_length-1), 1) == &quot;&#92;&#92;&quot; ) $org_str .= chr(32);<br><br>19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$org_str = str_replace(&quot;&#92;&#92;0&quot;, &quot;&#92; 0&quot;, $org_str);<br>20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $org_str;<br>21&nbsp;&nbsp;&nbsp;&nbsp;}<br></td></tr>
<tr>
<td colSpan="2">　<strong>02</strong> <font color="#ff0000">如果您的 MySQL character set 是 big5 之類的，它本身能辨識雙位元文字時，才需要本函數來加以處理。否則，就可以直接回傳原字串了。</font></td></tr>
<tr>
<td colSpan="2">　<font color="#ff0000">請注意：這裡使用 mysql_client_encoding 函數來判斷您的 MySQL character set，而此函數需在 PHP 4.3.0 版以後才能支援。</font></td></tr>
<tr>
<td colSpan="2">　<strong>03</strong> 先計算整個字串的總長度，以便後續的迴圈執行「逐字元檢查」的動作。</td></tr>
<tr>
<td colSpan="2">　<strong>05 - 06</strong> 依序挑出每個字元，與它的下一個字元，意即連續擷取兩個字元。</td></tr>
<tr>
<td colSpan="2">　<strong>07 - 08</strong> 將挑出的兩個字元分別轉成 ASCII 碼。</td></tr>
<tr>
<td colSpan="2">　若所得的第一個字元大於 ASCII 128 的話（可能是中文字），執行 <strong>10 - 13</strong> 之間的程式；否則，將迴圈的指標多加 1，這個中文字（兩個字元）算是過關了。</td></tr>
<tr>
<td colSpan="2">　所得的第二個字元恰好是 ASCII 92 的話（如：許、功、俞、餐等字），<strong>11</strong> 可以將被多加上去的 &#92; 移除。假如被檢查的字串是「成功&#92;了」，請看做法：</td></tr>
<tr>
<td colSpan="2">　檢查到「功」時 $tmp_i 是 2，<strong>substr($org_str, 0, $tmp_i+2)</strong> 可以擷取「成功」二字，再用 <strong>substr($org_str, $tmp_i+3)</strong> 擷取「了」字，並組合起來就行了。</td></tr>
<tr>
<td colSpan="2">　<strong>12</strong> 重算整個字串的總長度，因為字串長度改變了。</td></tr>
<tr>
<td colSpan="2">　<strong>17</strong> 重算整個字串的總長度，供第 18 行使用。</td></tr>
<tr>
<td colSpan="2">　<strong>18</strong> 在上述的處理程序之後，如果在字串末尾還有 &#92; 的話，在其後加個空白。</td></tr>
<tr>
<td colSpan="2">　由於前後文字之間可能組合出 &#92;0 字元（Null），它也會干擾程式的正常運作，所在第 <strong>19</strong> 行利用 str_replace 函數，將所有的 &#92;0 改成 &#92; 0（中間加個空白）。</td></tr>
<tr>
<td colSpan="2">
<p>　<strong>20</strong> 大功告成了。</p>
<p>Kevin後記：心得為自資料庫取出後，先trim。於text或textarea中輸入的文字，先trim後，以上述function處理過再存入資料庫。</p>
<p>建議應以utf8編碼為宜。</p>
</td></tr></tbody></table>]]></description>
            <pubDate>Sun, 30 Nov 2008 01:46:22 +0800</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1636]]></guid>
         </item>         <item>
            <title><![CDATA[MySQL中文編碼徹底研究]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1631]]></link>
            <description><![CDATA[<div class="main">
<p>先前提過一篇 <a href="http://jjgod.3322.org/2005/07/31/a-mysql-41-story/">A MySQL 4.1 Story</a> ，裡面把 MySQL 4.1的編碼解釋的還滿清楚的；但是我想還是有很多人在使用 MySQL 4.0 (或以下的版本)，因此裡面的解法就不適用了。</p>
<p>所以這次就來好好做個實驗吧！我將會把我遇到的所有狀況列舉出來，並且提出解決的方法。</p>
<p>不過往下看之前，請先確定你會使用 PHP 操作 MySQL ，也曉得 MySQL 版本之間的差異；最重要的是，你得知道 big5 、 latin1 及 utf8 是什麼東西。 </p>
<div></div><br clear="all"></div><a name="more"></a>
<div class="main">
<h2>實驗環境</h2>
<p>在這之前，我當然要先把我實驗的環境列出來。由於我個人是在 Windows 上開發的，因此所有相關的模組都是 Win32 平台；至於其他平台的看倌們請自行舉一反三，也歡迎指正我有疏漏的地方。</p>
<ul>
<li>作業系統： Windows XP SP2 
<li>MySQL ： 4.0 、 4.1 及 5.0 
<li>PHP ： 5.1.4 
<li>phpMyAdmin ： 2.8.2 </li></ul>
<h2>一個小故事的啟發</h2>
<p>我自己剛用 MySQL 4.1 時，因為預設字集的關係，活得非常快樂，殊不知這小小幸福的背後竟隱藏了莫大的陷阱。</p>
<p>有一次我在公司安裝好的 MySQL 4.1 測試「 PHP Smarty 樣版引擎」一書裡的程式，發現我輸入著名的許功蓋時， MySQL 一直回報錯誤訊息；這讓我非常訝異，因為我在家裡測試這個程式時是 OK 的 (也是 MySQL 4.1) 。後來我不死心，又跑到另一台安裝有 MySQL 4.0 執行這個程式，一樣還是不行；但是我一樣在家裡用 MySQL 4.0 測試卻又很正常。</p>
<p>這問題困擾了我很久，直到我的老大告訴我，因為以前他們開發程式的經驗，所以曾在這兩部機器的 my.ini 中將其中一個 default-character-set 參數設為 big5 。而這個參數在 MySQL 3.x 以前就有了，設成 big5 就可以避免掉很多 MySQL 處理字元上的問題。</p>
<p>原來如此！可是這到底和我的程式有什麼關係呢？而我的老大又是怎麼讓公司的程式順利在這些環境上運作呢？雖然知道了原因，但我卻沒有什麼好的解決方案；苦於截稿的壓力，我只好迂迴前進，用了一些特別的方法來解決問題。</p>
<p>後來還是有些讀者詢問了資料庫的問題，我那時便下定決心要好好研究 MySQL 各版本之間的差異，後來就找到 <a href="http://jjgod.3322.org/2005/07/31/a-mysql-41-story/">A MySQL 4.1 Story</a> 這篇文章，也介紹給大家。可是雖然知道 MySQL 4.1 的解法，但總覺得還是不夠踏實，畢竟 MySQL 4.0 的問題還沒解決；也因此我才發現，我自己對 MySQL 的編碼還是一知半解！ </p>
<h2>預設字集的麻煩</h2>
<p>我想大部份的開發者都知道， MySQL 在 4.1 以後就引進了非常先進 (也很麻煩) 的字集 (character set) 及校對 (collation) 。很多人都在這裡栽了個大跟斗，使得 MySQL 4.1 剛推出時無法受到一般開發者的重視，他們寧可回去使用 MySQL 4.0 以下的版本。</p>
<p>不過字集的概念在 MySQL 4.0 以前其實就已經出現了，我們可以為 MySQL 設定預設字集 (就是上面說的 default-character-set) 來控制 MySQL 在輸入輸出時的資料編碼。只是在 MySQL 4.0 以前支援的編碼型態不多，而且大多數人在安裝時也不會特意去設定它，也因此大家就忽略了這個問題。</p>
<p class="note">註：我們可以用 SHOW VARIABLES LIKE &#39;character_sets&#39; 這段 SQL 語法來查詢 MySQL 4.0 所支援的編碼型態。</p>
<p>其實忽略了也好，日子可以過得很快樂。因為大部份的用戶端工具，都是以安裝後的預設字集在處理 MySQL 的資料；也因此我們只要善用這些工具，事情通常不會太大條。</p>
<p>可是很抱歉，凡事都會有例外！只要你把預設字集設為 big5 ，那麼麻煩就跟著來了。因為在 big5 碼在編碼時沒有把 ASCII 的控制碼排除在外，使得我們在處理某些字 (例如著名的「許功蓋」) 時，就會出現問題！</p>
<p class="note">註：簡單來說，就是「許功蓋」這些字的第二個字元碼是一個反斜線 (&#92;) ，它屬於 ASCII 的控制碼。可參考<a href="http://osc.kmd.com.tw/">網路甘仔店</a> - <a href="http://osc.kmd.com.tw/article5.html">淺談許蓋功</a>這篇文章，裡面有更詳盡的解說。</p>
<p>因此，以下的解決方案是以 big5 為主，以符合我工作的環境；不過我還是會把 latin1 及 utf8 考慮進去，畢竟還是有大部份開發者是採用這樣的環境的。</p>
<p>說了半天，到底 MySQL 如何指定預設字集呢？其實指定 MySQL 預設字集的方法有很多，在 Windows 平台下，最快的方式就是修改 my.ini ： </p>
<pre><code>[mysqld]
...
default-character-set = big5
...</code></pre>
<p>也就是在 mysqld 區段下，加上一行 default-character-set 的設定。</p>
<p>重新啟動 MySQL 後，我們就能將 MySQL 的預設字集改為 big5 。</p>
<p class="note">註： MySQL 4.1 以後應改用 character-set-server ，但 default-character-set 因為相容性的目的還是保留使用。 </p>
<h2>用戶端</h2>
<p>所謂用戶端其實是指下達指令給 MySQL 的程式，像是 MySQL 內建的 mysql 或 mysqladmin 等指令，也可以是 PHP 所建構的 Web 應用程式 (如 phpMyAdmin) ，當然也包含我們自行開發的網站等。諸如此類的程式，都會透過一個通訊管道來和 MySQL 內部做溝通。而在這個管道之內所傳送的資料編碼格式是否有經過正確的處理，往往就是影響 SQL 指令能不能成功執行的重要因素。</p>
<p>接下來我用 PHP 來做說明，先讓大家瞭解用戶端應該要注意什麼東西。</p>
<h3>HTML 頁面的編碼</h3>
<p>我相信大家都知道以下的 HTML 標籤所代表的意義：</p>
<pre><code>&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;</code></pre>
<p>然而很多人總是會有一種誤解，那就是這個標籤代表的就是這頁面的編碼，也就是 utf8 。不對嗎？其實只對了一半。如果要讓頁面輸出正確的文字內容，那麼HTML 文件儲存的編碼也得是 utf8 才行。</p>
<p>怎麼說呢？你可以用PSPad (或其他支援 utf8 的文字編輯器) 打開你正在編輯的 HTML 文件，你應該可以看到下方狀態列上的代碼頁是 UTF-8 ：</p>
<p class="image"><img height="290" alt="" src="http://jaceju.staff.doubleservice.com/tutorial/mysql_escape/1.gif" width="622"/></p> 
<p>也就是說這兩者的格式要一致，這樣頁面的顯示才會是正確的 utf8 編碼。</p>
<p>不過如果頁面檔案都符合上面的要求，但實際上用瀏覽器觀看時，還是變成亂碼該怎麼辦呢？</p>
<p class="image"><img height="425" alt="" src="http://jaceju.staff.doubleservice.com/tutorial/mysql_escape/2.gif" width="646"/></p> 
<p>這時有幾個地方要檢查：</p>
<ol>
<li>PHP 中是否有使用 header 函式送出了錯誤的編碼？例如： <pre><code>header(&#39;Content-Type: text/html; charset=iso-8859-1&#39;);</code></pre>
<li>PHP.INI 中，是否有把 default_charset 註解掉？例如： <pre><code># default_charset = &quot;iso-8859-1&quot;</code></pre>
<li>如果是使用 Apache 做為 Web Server 時，要在 httpd.conf (或 .htaccess) 中，把 AddDefaultCharset 設為 Off 。 </li></ol>
<p>這時就可以用頁面屬性來確定編碼是否正確，以 Firefox 為例：</p>
<p class="image"><img height="411" alt="" src="http://jaceju.staff.doubleservice.com/tutorial/mysql_escape/3.gif" width="425"/></p> 
<p>有了正確的頁面編碼後，我們才能確保送給 MySQL 的資料是正確的編碼格式。例如，在 MySQL 預設字集是 big5 時，丟給 MySQL 的資料就應該是 big5 編碼；反過來說， MySQL 如果存的是 big5 編碼，那麼它丟出資料來時，我們也應該要用正確的 big5 頁面編碼去接收這些資料。當然 utf8 也是一樣，雖然我們可以用 iconv 去轉換資料的編碼，但是我還是建議大家儘量使用正確的用戶端編碼，以節省轉換的時間。</p>
<p>後面我們會再提到 MySQL 不同的版本如何傳遞這些資料，那裡才是 MySQL 存取資料的真正關鍵所在。 </p>
<h3>去除 Magic Quotes 的影響</h3>
<p>輸入資料最大的一個重點就是：使用者輸入什麼，資料庫就要存入什麼。當 HTML 頁面傳回表單資料時，我們就會將它們存入資料庫，這時常會使用 PHP 來完成這項工作。不過很多人在透過 PHP 操作 MySQL 時，常會忽略掉一個問題，那就是在 PHP.INI 裡的 magic_quotes_gpc 這個選項。</p>
<p>當 magic_quotes_gpc 設為 Off 時，使用者如果輸入「許功蓋」的話，那麼 PHP 從 HTML 表單上接收到的字就是「許功蓋」這三個完整的原始資料 (Raw Data) 。但是有時候，某些伺服器的 magic_quotes_gpc 是設為 On 的，那麼 PHP 就會對這些特殊字做脫逸 (Escape) 的動作，使它們變成「許&#92;功&#92;蓋&#92;」；換句話說，使用者輸入的值就已經不是原始資料了。</p>
<p>我在寫程式時，常會堅守一個原則：「除非必要，否則就不要過度依賴系統設定值。」因此我希望程式所取得的是使用者輸入的原始資料，然後必要時再加以處理。</p>
<p>那麼怎麼不讓 magic_quotes_gpc 影響使用者輸入的資料呢？我通常會在程式一開始，用以下片段來實作：</p>
<pre><code>// 去除 Magic Quotes 的影響
if (get_magic_quotes_gpc())
{
  $_GET = array_map(&#39;stripslashes&#39;, $_GET);
  $_POST = array_map(&#39;stripslashes&#39;, $_POST);
  $_COOKIE = array_map(&#39;stripslashes&#39;, $_COOKIE);
  $_REQUEST = array_map(&#39;stripslashes&#39;, $_REQUEST);
}</code></pre>
<p class="note">註：其實這裡我將會用一個 Request 類別來包裝它們，所以上面的程式只是示意而已。</p>
<p>事實上，後面要談的東西已經跟 PHP 沒有太大的關係。只是這裡我將會繼續使用 PHP 來示範，所以取得使用者輸入的原始資料就變得非常重要了。</p>
<h2>SQL 語法 (insert, update and select)</h2>
<p>SQL 語法常用的就是 INSERT, UPDATE 及 SELECT 了，不過其實它們並不會影響我們所用的編碼。真正令我們困擾的，就是「許功蓋」這類的 big5 編碼中文字。</p>
<p>我剛剛說過，用戶端傳來的資料編碼格式其實意義不大，重要的是我們有沒有正確依照 MySQL 中所設定的字集去處理這些內容。以下我會告訴大家，什麼樣的編碼格式需要什麼樣的處理方式。</p>
<h3>組合正確 BIG5 編碼的 SQL 語法</h3>
<p>之前在書裡面，我用 iconv 來解決輸入許功蓋的問題，但是這並不是個好方法 (而且也不適用於預設字集為 big5 的 MySQL 4.0) 。其實不管在 MySQL 的哪一個版本，當我們把預設字集設為 big5 時， MySQL 就會認得 SQL 語法裡面的中文字。舉個例子來說，假設我們要把「許功蓋」這三個字存入某個資料表中時，在預設字集為 latin1 時，語法如下：</p>
<pre><code>INSERT INTO table_name (field_name) VALUES (&#39;許&#92;功&#92;蓋&#92;&#39;)</code></pre>
<p>這是因為 latin1 不認識許功蓋這三個字，而是把它看成 6 個 ASCII 碼 (0xB3 0x5C 0xA5 0x5C 0xBB 0x5C)；所以我們得將許功蓋這三個字後面都加上一個反斜線 (0x5C) ，以避免它們被視為控制字元。</p>
<p>但在 big5 時，語法就要變成： </p>
<pre><code>INSERT INTO table_name (field_name) VALUES (&#39;許功蓋&#39;)</code></pre>
<p>因為這時候 MySQL 已經能夠分辨許功蓋三個中文字了，所以就不用加上反斜線了。</p>
<p class="note">註： utf8 就沒那麼麻煩了，因為它在編碼時已經考慮了 ASCII 控制碼，所以基本上不會造成什麼問題。</p>
<p>或許大家有查過 PHP 手冊，知道 PHP 有提供一個 mysql_real_escape_string 的函式；它會依照目前的資料庫連線字集來處理字串，似乎是我們要的？</p>
<p>但是很可惜，它還是會有一些中文字 (像上面說的許功蓋) 與反斜線及單引號的組合無法正確處理。所以底下我將會一一解釋這些有問題的組合，應該用什麼方式來解決。 </p>
<h3>單引號 (&#39;) 問題</h3>
<p>我想大家應該都很瞭解 SQL Injection 所帶來的災難，而大部份的 PHP 開發者都依賴開啟 Magic Quotes 來幫他們解決這個問題。但如同我前面所強調的，不要去依賴系統的設定，因此自行處理這些有問題的資料就變得很重要了。</p>
<p>在預設字集為 latin1 的情況下，不論在哪個 MySQL 版本，你可以用 addslashes 這個 PHP 函數將單引號變成「&#92;&#39;」，這樣一來就能正確寫入。但是在 big5 (或 utf8 ) 的環境下，我們最好改用兩個單引號 (&#39;&#39;) 來過濾 (latin1 反而不行) ；不過這樣一來，我們就會有其他需要脫逸的字元沒有處理到，因此我就要先用 addslashes 來過濾控制字元： </p>
<pre><code>$output = addslashes($data);</code></pre>
<p>然後如果發現伺服端的預設字集不是 latin1 的話，將單引號換成兩個單引號</p>
<pre><code>$search = array (&#39;/[&#92;x5c][&#92;x27]/&#39;);
$replace = array (&quot;&#39;&#39;&quot;);
$output = preg_replace($search, $replace, $output);</code></pre>
<p class="note">註：事實上單引號用反斜線脫逸是可行的，但是我在 big5 或 utf8 測試的結果，有時會出現 SQL 語法錯誤的問題；因此我個人傾向將它換成兩個單引號。 </p>
<h3>反斜線 (&#92;) 問題</h3>
<p>剛剛提到 big5 的「許功蓋」因為包含了反斜線 (&#92;) ，而使得它們放到預設字集為 latin1 的 SQL 語法時需要先脫逸。反過來如果預設字集為 big5 時，就不用脫逸了。不過世事難料，如果今天使用者輸入的 Raw Data 就是「許&#92;功&#92;蓋&#92;」時怎麼辦？</p>
<p>不論對何種字集來說，反斜線等控制字元還是要脫逸的；只是 big5 中的「許功蓋」等字並不需要，因為它們是一個獨立的個體。可是 PHP 的 addslashes 並不曉得「許功蓋」這些字屬於完整的中文字，它還是會把「許&#92;功&#92;蓋&#92;」變成「許&#92;&#92;&#92;功&#92;&#92;&#92;蓋&#92;&#92;&#92;」。可是預設字集為 big5 的 MySQL 只會接受「許&#92;&#92;功&#92;&#92;蓋&#92;&#92;」，也就是「許」字後面不再接上一個反斜線。因此如果直接把 addslashes 的回傳值塞入預設字集為 big5 MySQL 的話，就會出現問題了。 </p>
<p>解決的方式很簡單，那就是在 addslashes 之後將「許&#92;」變成「許」。因為 big5 編碼的第一個位元組範圍是 0xA1 到 0xF9 ，所以當我們遇到字元碼範圍在 0xA1 到 0xF9 ，而第二個字元碼為 0x5C 時，就可以把它當成是中文字，進而過濾掉它： </p>
<pre><code>$search = array (&#39;/([&#92;xa1-&#92;xf9][&#92;x5c])[&#92;x5c]/&#39;);
$replace = array (&#39;&#92;1&#39;);
$output = preg_replace($search, $replace, $output);</code></pre>
<p class="note">註： big5 編碼的說明請參考：<a href="http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/big5.html">http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/big5.html</a> 。 </p>
<p>不過這樣會造成另一個問題，那就是第二個位元組的編碼有時會落在第一個位元組的編碼範圍裡。例如「天夫」這類的字，它們的第二個位元組編碼分別是 0xD1 及 0xD2 ，剛好在 0xA1 到 0xF9 間。如果我們輸入的原始資料是「天&#92;夫&#92;」時，用上面的程式過濾後反而就會變成「天夫」，那就不是我們要的資料了。所以我們必須在上面的程式中，先對這樣的字做處理：</p>
<pre><code>$search = array (<strong>&#39;/([&#92;xa1-&#92;xf9][&#92;xa1-&#92;xf9][&#92;x5c])/&#39;</strong>, &#39;/([&#92;xa1-&#92;xf9][&#92;x5c])[&#92;x5c]/&#39;);
$replace = array (<strong>&#39;&#92;1&#92;&#92;&#39;</strong>, &#39;&#92;1&#39;);
$output = preg_replace($search, $replace, $output);</code></pre>
<p>方法就是在遇到「天&#92;夫&#92;」這樣的資料時，在 addslashes 完成後加上一個反斜線 (在單引號字串內，兩個反斜線會被解釋成一個反斜線) ，變成「天&#92;&#92;&#92;夫&#92;&#92;&#92;」 (addslashes 一個，正規式一個，共兩個反斜線) ，然後再讓第二個正規式去過濾成「天&#92;&#92;夫&#92;&#92;」即可。</p>
<p class="note">註：反過來先濾再加的話，是會有問題的，不信大家可以試試看。</p>
<h3>MySQL 版本問題</h3>
<p>上面的理論，雖然不論在哪一個 MySQL 版本都適用，但是在 MySQL 4.1 以上時卻要特別注意一件事：連線校對 (connection collation) 的編碼。</p>
<p class="note">註：「連線校對」這個譯詞是從 phpMyAdmin 借用的。 </p>
<p>對 MySQL 4.0 而言，它不會去管資料是什麼編碼，只要丟過來的 SQL 語法能被伺服端的預設字集所接受，那麼它就會把它寫入資料表。換句話說，使用者如果在 MySQL 4.0 中要透過 SQL 語法寫入或讀出資料，其編碼都是由伺服端來主導。</p>
<p>可是大家都知道 MySQL 在 4.1 以後，在核心架構上有了很大的改變。我們可以針對資料庫、資料表甚至是資料欄位設定不同的校對 (collation) 編碼，而它們會繼承預設字集所設定的值，除非我們分開設定它們。所以在預設字集改為 big5後，我們之後所建立的資料表的儲存方式也會變為 big5 (當然也可以設定為 utf8 ) 。</p>
<p>當 MySQL 要寫入資料或讀出資料時，它無法確定這些資料的格式是不是符合使用者的要求。這時候我們就得自行指定正確的編碼，讓 MySQL 自動轉換這些資料。因此，在對 MySQL 4.1 以後的版本下達 INSERT, UPDATE 及 SELECT 指令之前，都應該要先用以下指令來指定正確的連線校對：</p>
<pre><code>SET NAMES big5 (或 SET NAMES &#39;big5&#39;)</code></pre>
<p>也就是說在 MySQL 4.1 以後，就算我們把預設字集設為 big5 或 utf8 ，事實上還是得看資料庫或資料表實際所設定的校對編碼 (除非建立時採用繼承值) 。所以 SET NAMES 只會影響 MySQL 伺服端和 PHP 程式之間的通訊編碼格式，跟預設字集沒有太大關係。詳細的過程我不多加說明了，請自行參考 <a href="http://jjgod.3322.org/2005/07/31/a-mysql-41-story/">A MySQL 4.1 Story</a> 。 </p>
<p>那我們能不能讓程式自動決定 MySQL 的版本呢？當然可以，透過 PHP 的 mysql_get_server_info 函式就能做到了：</p>
<pre><code>$this-&gt;_version = (float) mysql_get_server_info($this-&gt;connection); // 4 or 4.1 or 5</code></pre>
<h3>決定是否脫逸</h3>
<p>當然在預設字集為 big5 時，我們可以用上面的方式進行脫逸；但是我得考慮到大部份環境下 big5 並非預設字集，因此我必須在連接資料庫時，就要偵測伺服器的預設字集，以決定是不是要對 big5 進行特別處理。</p>
<p>剛剛提到，在 MySQL 4.0 以前我們是由伺服器來決定通訊的編碼方式，而 MySQL 4.1 以後則由我們自己來決定。因此以下的程式片段就是用來偵測是不是要啟用中文字脫逸：</p>
<pre><code>// 當 MySQL 版本在 4.1 以上
if ($this-&gt;_version &gt; 4)
{
    // 伺服端預設字集變數名稱
    $variables_name = &#39;character_set_server&#39;;

    // 指定連線用的字集
    mysql_query(&quot;SET NAMES &quot; . $this-&gt;_client_character_set, $this-&gt;connection);
}
// 當 MySQL 版本在 4.0 以下
else
{
    // 伺服端預設字集變數名稱
    $variables_name = &#39;character_set&#39;;
}

// 取得伺服端所設定的預設字集
$result = mysql_query(&quot;SHOW VARIABLES LIKE &#39;$variables_name&#39;&quot;, $this-&gt;connection);
$row = mysql_fetch_assoc($result);
$this-&gt;_server_character_set = strtolower($row[&#39;Value&#39;]);

// 當 MySQL 版本在 4.1 以上
if ($this-&gt;_version &gt; 4)
{
    // 當用戶端字集為 big5 時，就要脫逸特別字
    $this-&gt;_is_escape = (bool) (&#39;big5&#39; == $this-&gt;_client_character_set);
}
// 當 MySQL 版本在 4.0 以下
else
{
    // 當伺服端字集為 big5 時，就要脫逸特別字
    $this-&gt;_is_escape = (bool) (&#39;big5&#39; == $this-&gt;_server_character_set);
}</code></pre>
<p>重點在 MySQL 4.0 要看的是 $this-&gt;_server_character_set ，這是從伺服器變數中取得的；而 MySQL 4.1 則是看 $this-&gt;_client_character_set ，它由程式開發者自行決定的。</p>
<h3>脫逸函式</h3>
<p>綜合以上的說明，也方便後面繼續解說，我先把將我自行建立的 MySQL 類別會部份用到脫逸的程式列舉如下；至於什麼時候要做些什麼事情，請大家自行看看裡面的註解吧：</p>
<pre><code>class MySQL
{
    // ...

    function MySQL($host, $user, $password, $dbname, $charset)
    {
        $this-&gt;connection = mysql_connect($host, $user, $password);

        // ...

        $this-&gt;_version = (float) mysql_get_server_info($this-&gt;connection);
        $this-&gt;_client_character_set = strtolower($charset);

        // ...

        // 當 MySQL 版本在 4.1 以上
        if ($this-&gt;_version &gt; 4)
        {
            // 伺服端預設字集變數名稱
            $variables_name = &#39;character_set_server&#39;;

            // 指定連線用的字集
            mysql_query(&quot;SET NAMES &quot; . $this-&gt;_client_character_set, $this-&gt;connection);
        }
        // 當 MySQL 版本在 4.0 以下
        else
        {
            // 伺服端預設字集變數名稱
            $variables_name = &#39;character_set&#39;;
        }

        // 取得伺服端所設定的預設字集
        $result = mysql_query(&quot;SHOW VARIABLES LIKE &#39;$variables_name&#39;&quot;, $this-&gt;connection);
        $row = mysql_fetch_assoc($result);
        $this-&gt;_server_character_set = strtolower($row[&#39;Value&#39;]);

        // 當 MySQL 版本在 4.1 以上
        if ($this-&gt;_version &gt; 4)
        {
            // 當用戶端字集為 big5 時，就要脫逸特別字
            $this-&gt;_is_escape = (bool) (&#39;big5&#39; == $this-&gt;_client_character_set);
        }
        // 當 MySQL 版本在 4.0 以下
        else
        {
            // 當伺服端字集為 big5 時，就要脫逸特別字
            $this-&gt;_is_escape = (bool) (&#39;big5&#39; == $this-&gt;_server_character_set);
        }
    }

    function escape($data)
    {
        // 不論何種編碼，都用 addslashes 先過濾
        $output = addslashes($data);

        // 如果伺服端的預設字集不是 latin1 的話，將單引號換成兩個單引號
        if (&#39;latin1&#39; != $this-&gt;_server_character_set)
        {
            $search = array (&#39;/[&#92;x5c][&#92;x27]/&#39;);
            $replace = array (&quot;&#39;&#39;&quot;);
            $output = preg_replace($search, $replace, $output);
        }

        // 如果需要脫逸特別字，將「許&#92;」這類的 pattern 換為「許」
        // 因為在預設字集為 big5 時，「許、功、蓋」這類的字會被視為是一個完整中文字
        // 而不必再使用反斜線脫逸
        // 但是如果該中文字的高位元剛好在 BIG5 碼的低位元範圍內時，就要針對這種字先把反斜線加上去
        if ($this-&gt;_is_escape)
        {
            $search = array (&#39;/([&#92;xa1-&#92;xf9][&#92;xa1-&#92;xf9][&#92;x5c])/&#39;, &#39;/([&#92;xa1-&#92;xf9][&#92;x5c])[&#92;x5c]/&#39;);
            $replace = array (&#39;&#92;1&#92;&#92;&#39;, &#39;&#92;1&#39;);
            $output = preg_replace($search, $replace, $output);
        }
        return $output;
    }

    // ...

}</code></pre>
<p>然後 INSERT 資料時，就可以用以下程式完成：</p>
<pre><code>$insert = sprintf(&quot;INSERT INTO table_name (field_name) VALUES (&#39;%s&#39;)&quot;, $db-&gt;escape($data));
$db-&gt;query($insert);</code></pre>
<p>完整的程式請參考後面的程式下載。</p>
<h2>搜尋 (search)</h2>
<p>前面提過了，使用者輸入什麼樣的資料，我們就要存入什麼資料。那麼使用者如果輸入一個關鍵字要找資料的時候，我們能不能正確地比對出他所需要的內容呢？</p>
這裡我簡單用完整比對 (=) 及部份比對 (LIKE) 來說明，至於全文檢索我還在研究中，暫時略過不提。 
<h3>完整比對</h3>
<p>一個簡單的完整比對 SQL 語法如下：</p>
<pre><code>SELECT * FROM table_name WHERE field_name = &#39;keyword&#39;</code></pre>
<p>這種語法常會用在使用者權限的比對上，像是登入表單。而且不用我說，大家應該都知道 keyword 的部份就是造成 SQL Injection 的關鍵點。所以在將 Keyword 放入 SQL 語法中時，就要先行脫逸。</p>
<p>那麼脫逸的規則是什麼呢？沒錯，就是上面新增資料時的規則。例如：</p>
<pre><code>$query = sprintf(&quot;SELECT * FROM table_name WHERE field_name = &#39;%s&#39;&quot;, $db-&gt;escape($keyword));
$result = $db-&gt;query($query);</code></pre>
<p>簡單又輕鬆。</p>
<h3>部份比對 </h3>
<p>部份比對的 SQL 語法如下：</p>
<pre><code>SELECT * FROM table_name WHERE field_name LIKE &#39;%keyword%&#39;</code></pre>
<p>這種語法大部份是用在搜尋上，像是商品資料搜尋等。依照剛剛的慣例，我們大概會寫出以下的程式：</p>
<pre><code>$query = sprintf(&quot;SELECT * FROM table_name WHERE field_name LIKE &#39;%s&#39;&quot;, &#39;%&#39; . $db-&gt;escape($keyword) . &#39;%&#39;);
$result = $db-&gt;query($query);</code></pre>
<p class="note">註：我把 LIKE 要用的 % 符號拿到 SQL 語法外面，這是因為後面程式要共用的關係。 </p>
<p>一般狀況下，大部份中文字都能被找到，所以這裡也常被大家忽略，以為只要用 escape 就萬事 OK 了。可是如果你要找內容是包含「許&#92;」的話，我想你應該是找不出任何東西來 (如果有人已經做到了，請受小弟我一拜) 。</p>
<p>在用 LIKE 比對時，我們並不能使用上面的脫逸規則。因為這時候單引號不能換成兩個單引號，而且反斜線要再脫逸一次。至於是為什麼？我想這應該是和 MySQL 的 LIKE 查詢方式有關係，這點還請高人指點一二。</p>
<p>總之結合上面的說明，我重新改寫了 escape 方法，並加入一個 searchEscape 方法：</p>
<pre><code>function escape($data)
{
    // 不論何種編碼，都用 addslashes 先過濾
    $output = addslashes($data);

    // 如果伺服端的預設字集不是 latin1 的話，將單引號換成兩個單引號
    <strong>// 但是如果使用 SELECT...LIKE 的話，就不能使用兩個單引號來代替</strong>
    if (&#39;latin1&#39; != $this-&gt;_server_character_set <strong>&amp;&amp; !$this-&gt;_is_like_search</strong>)
    {
        $search = array (&#39;/[&#92;x5c][&#92;x27]/&#39;);
        $replace = array (&quot;&#39;&#39;&quot;);
        $output = preg_replace($search, $replace, $output);
    }

    // 如果需要脫逸特別字，將「許&#92;」這類的 pattern 換為「許」
    // 因為在預設字集為 big5 時，「許、功、蓋」這類的字會被視為是一個完整中文字
    // 而不必再使用反斜線脫逸
    // 但是如果該中文字的高位元剛好在 BIG5 碼的低位元範圍內時，就要針對這種字先把反斜線加上去
    if ($this-&gt;_is_escape)
    {
        $search = array (&#39;/([&#92;xa1-&#92;xf9][&#92;xa1-&#92;xf9][&#92;x5c])/&#39;, &#39;/([&#92;xa1-&#92;xf9][&#92;x5c])[&#92;x5c]/&#39;);
        $replace = array (&#39;&#92;1&#92;&#92;&#39;, &#39;&#92;1&#39;);
        $output = preg_replace($search, $replace, $output);
    }
    return $output;
}

function searchEscape($str)
{
    $this-&gt;_is_like_search = TRUE;
    <strong>return $this-&gt;escape($this-&gt;escape($str));</strong>
    $this-&gt;_is_like_search = FALSE;
}</code></pre>
<p>換句話說，除了單引號不用兩個單引號來過濾外，我們還得用兩次脫逸來進行 LIKE 比對。使用範例如下： </p>
<pre><code>$query = sprintf(&quot;SELECT * FROM table_name WHERE field_name LIKE &#39;%s&#39;&quot;, &#39;%&#39; . <strong>$db-&gt;searchEscape($keyword)</strong> . &#39;%&#39;);
$result = $db-&gt;query($query);</code></pre>
<p>透過以上的程式來搜尋「許&#92;」這個關鍵字時，得到的 SQL 語法如下：</p>
<pre><code>SELECT * FROM table_name WHERE field_name LIKE &#39;%許&#92;&#92;&#92;&#92;%&#39;</code></pre>
<p>我們可以看到，一個反斜線變成了四個反斜線；這樣一來，我們才能在預設字集為 big5 的 MySQL 資料表裡，查詢到包含「許&#92;」的資料列。 </p>
<p class="note">註： latin1 和 utf8 也是一樣的做法，只是 latin1 會把「許」變成「許&#92;&#92;&#92;」 (記住一個反斜線要變成四個反斜線) 。 </p>
<h2>預設字集對資料欄位長度的影響</h2>
<p>在 MySQL 4.0 裡，如果我們用 varchar(10) 來儲存 big5 中文的話，那麼一個中文字就會被計算為 2 個位元組；就算我們設定預設字集為 big5 ，也不會影響 MySQL 計算中文字的方式；換句話說， varchar(10) 只能存 5 個 big5 中文字。</p>
<p>但是在 MySQL 4.1 以後就不一樣了，如果資料表的校對編碼設為 big5 ，那麼中文字就會被當成一個字元來計算。所以 varchar(10) 可以儲存 10 個英數字，也可以儲存 10 個中文字。當然 utf8 也是一樣的，雖然 utf8 實際會佔用 1 到 3 個位元組，但在校對編碼是 utf8 的情況下，varchar 還是能儲存 10 個字 (包含英數字或中文字等) 。也就是說， varchar(10) 算的是字數，而非位元組的長度。 </p>
<p class="note">註：可參考此篇討論：<a href="http://phorum.study-area.org/viewtopic.php?t=40293">MySQL超出欄位長度後仍能儲存</a>。 </p>
<h2>程式庫 (mysql, PEAR::DB)</h2>
<p>我已經幫大家把上面的規則整理成 PHP 的類別 (Class) ，各位只要把它們拿來研究一下，應該就能瞭解 MySQL 在處理 big5 中文字時所要注意的事情。這裡我分為兩個部份來談，一個是傳統 PHP 所內建的 mysql 函式，另一個則是我常用的 PEAR::DB 。其他程式庫例如 PDO 、 ADOdb 或 mysqli 等，就留給大家自行練習吧。 </p>
<h3>內建的 mysql 函式</h3>
<p>我把內建的 mysql_* 函式包裝如下：</p>
<pre><code>/class/MySQL.php
/class/MySQLResult.php</code></pre>
<p>這兩個類別的用法如下：</p>
<pre><code>&lt;?php
require_once &#39;config.php&#39;;
require_once &#39;class/MySQL.php&#39;;

$db = MySQL::connect(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_CHAR_SET);

$result = $db-&gt;query($sql);

while ($row = $result-&gt;fetchAssoc())
{
    print_r($row);
}
$result-&gt;free();
?&gt;</code></pre>
<p>我們可以使用 MySQL::connect 方法來建立一個 db 物件，這個方法是使用 PHP4 的 Singleton 模式。其中 DB_CHAR_SET 就是我們指定的編碼，它在 MySQL 4.0 以前的版本會被自動忽略，而在 MySQL 4.1 以後的版本它就是 SET NAMES 會用到的編碼格式。 </p>
<p>當建立好 db 物件後，我們就可以用 query 方法來執行 SQL 語法。如果 query 是執行 SELECT 語法，那麼就會回傳一個 result 物件，這個物件的型態就是 MySQLResult 。而 result 物件支援一個方法，就是 fetchAssoc ，它其實只是包裝了 mysql_fetch_row 這個函式而已。 </p>
<p class="note">註： MySQL.php 會自動把 MySQLResult.php 包含進來。 </p>
<p>當然這兩個類別程式還不是很完善，而且沒有錯誤機制處理。因為它們只是我用來測試編碼問題所暫時開發的工具而已，如果大家有需要可以自行改寫它們 (不限用途) 。</p>
<p>詳細的程式請直接下載後面的範例參考。 </p>
<h3>PEAR::DB </h3>
<p>我們公司在連接資料庫的函式庫中選擇了 PEAR::DB ，而且它也是我書中所採用的資料抽象層。因此如何把上面的規則融入 PEAR::DB 中，對我來說是一件很重要的事情。</p>
<p>當然我不可能去修改 PEAR::DB 的程式碼，因為 PEAR::DB 雖然已不再更新，但是還是有持續在修正 Bug 。所以我的目標是儘可能不要動到程式原來的核心，然後把前面的規則加進去。</p>
<p>怎麼做呢？這時我們就會用到一個設計模式： Decorator 。</p>
<p>首先我用一個新的類別 PEARDBWraper 繼承 DB_mysql (PEAR::DB 中的 MySQL Driver) ，這樣 PEARDBWraper 就會繼承 PEAR::DB 的所有方法與屬性。然後我先用 PEAR::DB 的 connect 函式來建立一個 db 物件，再把它用 PEARDBWraper 包起來：</p>
<pre><code>$db = &amp;DB::connect(DB_DSN);
if (DB::isError($db))
{
    header(&quot;Content-Type: text/html; charset=big5&quot;);
    die ($db-&gt;getDebugInfo());
}
$db = new PEARDBWrapper($db, DB_CHAR_SET);
$db-&gt;setFetchMode(DB_FETCHMODE_ASSOC);</code></pre>其中 DB_CHAR_SET 和前面的 MySQL 類別提到的說明是一樣的。 
<p>在包裝起來之後， PEARDBWraper 會自動取代 $db 的建構函式及 escapeSimple 方法的實作，並加入一個 searchEscape 方法。這樣一來我們就可以不用在修改太多程式的狀況下，順利解決 big5 編碼的問題。</p>
<p class="note">註：嚴格來說，我的做法不是標準的 Decorator 模式，只是它的目的很像，所以我就借用了這個名詞。 </p>
<p>怎麼用呢？只要配合 PEAR::DB 的 prepare 及 execute 即可：</p>
<pre><code>$insert = &quot;INSERT INTO table_name (field_name) VALUES (?)&quot;;
$sth = &amp;$db-&gt;prepare($insert);
$result = &amp;$db-&gt;execute($sth, array ($data));</code></pre>
<p>如果是要完整比對，也是直接使用 getAll 方法 (或其他對等的 get* 方法) ：</p>
<pre><code>$query = &quot;SELECT * FROM table_name WHERE field_name = ?&quot;;
$recordset = &amp;$db-&gt;getAll($query, array($keyword));</code></pre>
<p>而部份比對就要借助 searchEscape 了： </p>
<pre><code>$query = &quot;SELECT * FROM table_name WHERE field_name LIKE ?&quot;;
$recordset = &amp;$db-&gt;getAll($query, array(&#39;%&#39; . $db-&gt;searchEscape($keyword) . &#39;%&#39;));</code></pre>
<h2>資料的匯出與匯入</h2>
<p>接下來要談談如何匯出與匯入正確編碼的 SQL 指令備份檔，我想這些大概會是很多人想要搞清楚的地方 (其實我之前也是) 。在我仔細研讀了 <a href="http://tlsj.tenlong.com.tw/WebModule/BookSearch/bookSearchViewAction.do?isbn=9575279085&amp;sid=30707">MySQL 5 徹底研究 (第三版)</a>，並實驗了一陣子之後，終於有了以下的心得。 </p>
<h3>匯出 (mysqldump) </h3>
<p>在 MySQL 底下要匯出資料的最快方式為：</p>
<pre><code>&gt; mysqldump -u root -p --add-drop-table db_name &gt; db_name.sql</code></pre>
<p>不過這個匯出方式所產生的 SQL 語法會因為預設字集而有所不同。舉例來說，如果資料裡面有「許功蓋」三個字，那麼預設字集為 latin1 時，所匯出的結果會是：</p>
<pre><code>INSERT INTO table_name VALUES (&#39;許&#92;功&#92;蓋&#92;&#39;);</code></pre>
<p>而預設字集為 big5 時：</p>
<pre><code>INSERT INTO table_name VALUES (&#39;許功蓋&#39;);</code></pre>
<p>換句話說，在匯出資料時如果預設字集是 big5 ，那麼「許功蓋」就會被視為是完整的中文字。</p>
<p>不過在 MySQL 4.1 以後，資料匯出的編碼就會依照我們所設定的資料欄校對來決定了。也就是說，如果在建立資料庫或資料表時，使用的校對是 big5 ，而且資料欄位是繼承資料表的設定時，那麼匯出來的「許功蓋」就不會被加上反斜線。</p>
<p class="note">註：還有一點要注意，那就是在 MySQL 4.0 以前，預設是用 ASCII 的編碼來匯出 SQL ；而 MySQL 4.1 以後，則是用 UTF8 編碼來匯出 SQL 。</p>
<h3>匯入</h3>
<p>那麼怎麼把上面產生出來的 SQL 檔案再匯進去呢？可以用以下的語法：</p>
<pre><code>&gt; mysql -u root -p db_name &lt; db_name.sql</code></pre>
<p>在 MySQL 4.0 以前，如果我們是在預設字集為 big5 的環境下執行匯出動作，那麼匯入的指令要改成：</p>
<pre><code>&gt; mysql -u root -p <strong>--default-character-set=big5</strong> db_name &lt; db_name.sql</code></pre>
<p>這樣 mysql 指令才會以正確的 big5 編碼來匯入 SQL 檔案，這時候 MySQL 4.0 的預設字集是不是 big5 都沒關係。 </p>
<p>至於 MySQL 4.1 以後，就會自行依照資料表的校對編碼來匯入資料了。</p>
<h3>匯出 MySQL 4.0 的資料並匯入 MySQL 4.1 裡</h3>
<p>剛剛說的匯出匯入都是在同一個版本下操作，可是如果今天我們將 MySQL 版本升級為 4.1 或 5.0 ，但備份的資料卻是 4.0 的版本時，該怎麼辦呢？</p>
<p>例如現在我們已經從預設字集為 big5 的 MySQL 4.0 中匯出了一個 db_name.sql 檔，內容如下：</p>
<pre><code>DROP TABLE IF EXISTS table_name;
CREATE TABLE table_name (
  field_name text NOT NULL
) TYPE=MyISAM;

INSERT INTO table_name VALUES (&#39;許功蓋&#39;);</code></pre>
<p>然後我們要將它匯入 MySQL 4.1 (或 5.0) 伺服器的 db_name 這個資料庫上。請依照以下步驟執行：</p>
<p>首先要確定 db_name 的校對編碼是 big5_chinese_ci (可以用 phpMyAdmin 來確定) ，因為 MySQL 4.0 所產生出來的 SQL 並不會包含字集的設定；如果直接執行這個 SQL 檔的話，那建立出來的資料表就會繼承 db_name 這個資料庫的校對編碼。而這時候如果 db_name 這個資料庫的校對編碼不是 big5 時，那匯進去的資料就會變成亂碼了。 </p>
<p>接著我們再用以下指令匯入：</p>
<pre><code>&gt; mysql -u root -p <strong>--default-character-set=big5</strong> db_name &lt; db_name.sql</code></pre>
<p>如果是在預設字集為 latin1 的 MySQL 4.0 中，用 mysqldump 或者是用 phpMyAdmin 匯出的資料，其格式都會是 latin1 (也就是「許功蓋」會變成「許&#92;功&#92;蓋&#92;」) 。這時我們不能用 latin1 來將資料匯入 MySQL 4.1 裡，否則資料會變成亂碼。應該要改用 binary 來匯入：</p>
<pre><code>&gt; mysql -u root -p <strong>--default-character-set=binary</strong> db_name &lt; db_name.sql</code></pre>
<p>因為這時候 mysql 會用原始格式 (binary) 來讀取 db_name.sql ，且不會用任何編碼格式來解釋中文字，而是直接存入資料庫裡。這就是之前我提到的<a href="http://blog.roodo.com/jaceju/archives/946844.html">將 MySQL 4.0 的資料轉至 MySQL 5.0</a> 時所描述的狀況。</p>
<h3>匯出 MySQL 4.1 的資料並匯入 MySQL 4.0 裡</h3>
<p>如果很不幸地，我們需要將新版的 MySQL 4.1 資料匯回 MySQL 4.0 裡時怎麼辦呢？</p>
<p>首先我們要先在 MySQL 4.1 的伺服器上，用以下指令把資料表匯出：</p>
<pre><code>&gt; mysqldump -u root -p <strong>--compatible=mysql40 --default-character-set=big5</strong> db_name &gt; db_name.sql</code></pre>
<p>也就是說，在 MySQL 4.1 的 mysqldump 中，我們可以用 --compatible=mysql40 來產生相容於 MySQL 4.0 的 SQL 指令檔；然後在匯出 SQL 時指定正確的字集。接著再到 MySQL 4.0 的伺服器上，用以下指令把資料表匯入：</p>
<pre><code>&gt; mysql -u root -p <strong>--default-character-set=big5</strong> db_name &lt; db_name.sql</code></pre>
<p>指令和上面 MySQL 4.0 的匯入方式是一樣的。</p>
<h2>phpMyAdmin</h2>
<p>我想應該大部份開發 PHP 的朋友們都是使用 phpMyAdmin 來管理 MySQL ，但是也有很多朋友常會遇到 phpMyAdmin 在顯示資料時出現亂碼的問題。其實這就和前面我所提到的用戶端頁面編碼有關，只要選擇了正確的頁面編碼，就應該能看到正確的資料。</p>
<p>而新版的 phpMyAdmin 會自行因應 MySQL 版本的不同，而有不同的語言選項。以下我會用 phpMyAdmin 2.8.x 的版本，來說明如何正確選擇這些語言，讓 phpMyAdmin 在呈現資料時，不致於出現亂碼。 </p>
<p class="note">註：在 phpMyAdmin 2.7.0 版以前，我想也許是因為 MySQL 4.1 採用的編碼方式讓 phpMyAdmin 的開發團隊有點混亂，而多少有一些操作上的問題。 </p>
<h3>MySQL 4.0 以前</h3>
<p>如果用 phpMyAdmin 連接 MySQL 4.0 時，我們會看到以下的主畫面：</p>
<p class="image"><img height="499" alt="" src="http://jaceju.staff.doubleservice.com/tutorial/mysql_escape/4.gif" width="578"/></p> 
<p>注意 Language 的部份，這裡就是能否正確輸入及顯示資料的關鍵所在。怎麼說呢？</p>
<p>舉個例子，如果大家有用 Wordpress 或 LifeType 這一類的 Web 套裝程式，預設會是使用 utf8 來做為頁面的編碼以及資料的儲存。這時如果用 Language 為 big5 的選項來查看 Wordpress 所建立的資料時，就會發現呈現的結果竟然是亂碼。也就是說，雖然一樣在 Wordpress 裡是用中文撰寫內容，但實際上這些中文的編碼是 utf8 格式，而非 big5 。 </p>
<p>那麼要怎麼查看正確的資料呢？在 Language 的下拉選單裡，其中「中文 - Chinese traditional 」分為 big5 和 utf8 ，這些選項會影響目前 phpMyAdmin 所產生的頁面編碼。換句話說，如果要查看 Wordpress 等採用 utf8 編碼所儲存的資料，就要用「中文 - Chinese traditional (utf8) 」；而其他我們自行開發，採用 big5 編碼所儲存的資料，就應該用「中文 - Chinese traditional (big5) 」。 </p>
<p class="note">註：實際上 MySQL 4.0 並不認識 utf8 ，所以實際上它還是會用目前的預設字集去處理 utf8 的資料。</p>
<p>除了會影響 phpMyAdmin 呈現資料的編碼格式之外， Language 選項也會影響 phpMyAdmin 在匯出 SQL 備份檔時的檔案編碼。也就是說如果是在 Language 中選擇「中文 - Chinese traditional (utf8) 」的話，那麼用 phpMyAdmin 的輸出功能所產生的 SQL 備份檔也會是 utf8 編碼 (可以用 PSPad 查看其下方狀態列上的代碼頁) 。</p>
<p>不過有個 phpMyAdmin 還是有個問題，那就是在預設字集為 big5 時，它還是會用 latin1 的格式來輸出 SQL 備份檔。但是 MySQL 4.0 並不支援上面提到的 binary 編碼，所以我們就沒辦法在預設字集為 big5 的狀況下，還原 phpMyAdmin 所產生出來的備份檔；因此還是建議大家在預設字集為 big5 時，使用 mysqldump 來做備份。 </p>
<h3>MySQL 4.1 以後 </h3>
<p>如果用 phpMyAdmin 連接 MySQL 4.1 或 5.0 時，我們會看到以下的主畫面：</p>
<p class="image"><img height="331" alt="" src="http://jaceju.staff.doubleservice.com/tutorial/mysql_escape/5.gif" width="578"/></p> 
<p>這時 Language 選項在正體中文的部份只會有「中文 - Chinese traditional 」一個選項，而不再有 big5 與 utf8 之分。這是因為 phpMyAdmin 對 MySQL 4.1 所有資料一律以 utf8 來呈現的關係。</p>
<p>至於 MySQL 連線校對的地方，就像是告知 phpMyAdmin 向 MySQL 下達「 SET NAMES 」指令一樣。換句話說，如果我們是要在校對編碼是 utf8 的資料表新增資料時，就要將 MySQL 連線校對設定為 utf8 。 </p>
<p>但是如果在 phpMyAdmin 中新增 big5 所沒有的字 (例如「堃」) 時，有兩種情況會使得我們無法順利把這些字存進去。第一種狀況就是當我們是用 big5 來做 MySQL 連線校對，第二種狀況就是如果資料表的校對編碼是 big5 的話 (例如 big5_chinese_ci ，而文字格式的資料欄是繼承此值) 。 </p>
<p class="note">註：在 big5 中存入「堃」的正確方法是用 &amp;#22531; 來儲存。 </p>
<p>因為這時候 phpMyAdmin 的頁面編碼一律都是 utf8 ，所以 HTML 送過來的 Raw Data 會是「堃」而不是「&amp;#22531;」；因此 phpMyAdmin 無法將此字由 utf8 轉換為 big5 ，結果「堃」字就會被改存成問號 (?) 。</p>
<p>所以當我們使用用 big5 來資料表的校對編碼時，用戶端的頁面編碼就一定要是 big5 ，這樣瀏覽器傳送過來的非 big5 編碼資料就會被轉換為 &amp;#xxxx; 此類的編碼格式 (對不起...我臨時忘記這種編碼格式的正式名詞) ，這時候才能正確存入資料表中。 </p>
<h3>不知名的語言: zh-tw</h3>
<p>如果你是從 phpMyAdmin 2.6.0 以前的版本升級到 2.7.0 以後的版本時，就有可能會出現一個錯誤：</p>
<pre><code>不知名的語言: zh-tw.</code></pre>
<p>這是因為 2.6.x 先前版本會在瀏覽器裡寫入語言選項的 cookie ，但是此 cookie 值不相容於 2.7.x 以後的版本，因而造成 2.7.x 以後的版本在切換其他語言選項時會解讀錯誤。解決的方法很簡單：移除瀏覽器的 Cookie 後，再重新讀取 phpMyAdmin 的主畫面即可。</p>
<p class="note">註：確切的版本我不是很確定，如果有哪位朋友清楚的話，還望不吝告知。 </p>
<h2>總結</h2>
<p>MySQL 4.0 以前的版本和 MySQL 4.1 以後的版本，在資料儲存的方式上有很大的差異，這也是造成很多人困惑的地方。這裡我再歸納本文的幾個重點：</p>
<ul>
<li>用戶端呈現與輸入的所採用編碼最好和目前 MySQL 所用的字集一致。 
<li>MySQL 的預設字集在 4.0 以前影響較大，在 4.1 以後會依照資料庫或資料表上所設定的字集為主。 
<li>我們必須依照正確的字集來組合正確的 SQL 語法，這個工作是由用戶端 (這裡是 PHP) 來完成的。 
<li>目前的 DB 程式庫，對預設字集為 big5 的 MySQL 支援性較差；因此在組合 SQL 語法時，我們需要有特殊的處理方式。 
<li>在 MySQL 4.0 以前的版本匯入或匯出資料時，要注意預設字集的問題。 
<li>用最新版的 phpMyAdmin ，可以有效處理字集的問題；但是目前的 phpMyAdmin 在處理 MySQL 4.1 上的 big5 編碼內容時，還是會有一些小問題。 </li></ul>
<p>我想我在這裡用文字說明的方式，一定還是有遺漏之處。不過如果大家能配合後面的程式來實地演練一番的話，應該就能對 MySQL 各版本在字集的處理方式有較深入的瞭解。 </p>
<h2>程式下載</h2>
<p>這裡我提供上面提到的程式庫，它們都是我自行開發的，所以說不定會有一些 Bug 存在。所以裡面我也提供了一些測試用的範例，大家可以自行參考說明檔，安裝在自己的機器上做測試。</p>
<p>程式下載：<a href="http://jaceju.staff.doubleservice.com/tutorial/mysql_escape/escape.zip">escape.zip</a> </p>
<h2>後記</h2>
<p>為什麼網路上有一堆處理 big5 的函式，我還要自己搞一個呢？原因很簡單：懶。</p>
<p>其實很多東西我都希望程式能自動幫我處理好，而大部份我在網路找到的函式庫都得將我目前的程式改動不少地方。當然不是說這些函式庫不好，只是對一個龐大的程式來說，面對這樣的修改，我得有非常強健的心臟及 24 小時不眠不休的體力。 </p>
<p>最後要感謝我公司的同事，以及<a href="http://blog.v-dark.net/">丫凱兄</a>。因為他們的測試，我才能確定我的程式適用在大部份的狀況 (及極特別的狀況) 。不過這樣的處理方式我想一定還不是百分之百可行，如果大家有發現任何不正確的觀念或實作方式，都歡迎在這裡通知我。</p>
<p>本文摘錄自<a href="http://blog.roodo.com/jaceju/archives/2019474.html">http://blog.roodo.com/jaceju/archives/2019474.html</a></p>
</div>]]></description>
            <pubDate>Tue, 11 Nov 2008 20:39:49 +0800</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1631]]></guid>
         </item>         <item>
            <title><![CDATA[首50大受歡迎的PHP編輯器]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1630]]></link>
            <description><![CDATA[<h3><a href="http://www.whenpenguinsattack.com/2006/07/10/php-editor-bonanza/" rel="bookmark"><font color="#ff7800" size="2">The top 50 PHP editors </font></a></h3>
<div class="entrymeta">July 10th, 2006 | Category: <a title="View all posts in php apps" href="http://www.whenpenguinsattack.com/category/php-apps/"><font color="#ff7800">php apps</font></a> </div><!-- google_ad_section_start -->
<div class="entrybody">
<p><strong>By Justin Silverton</strong></p>
<p>The following is a list of the top 50 PHP editors (commercial and freeware), with reviewed links to php-editors.com:</p>
<table cellSpacing="0" cellPadding="6" width="100%" align="center" border="0">
<tbody>
<tr>
<td><strong>Editor Name</strong></td>
<td><strong>Version</strong></td>
<td style="WIDTH:90px;"><strong>License</strong></td>
<td style="WIDTH:90px;"><strong>Platform/OS</strong></td>
<td align="middle"><strong>Our Rating</strong></td>
<td align="middle"><strong>User Rating</strong></td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=1"><font color="#ff7800">PHP Edit</font></a></td>
<td vAlign="top" align="middle">1.2.5</td>
<td vAlign="top">Freeware<br>Shareware<br>Commercial<br>Other</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">5/5</td>
<td vAlign="top" align="middle"><strong>4.55</strong><br>(125 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=2"><font color="#ff7800">Dreamweaver</font></a></td>
<td vAlign="top" align="middle">8</td>
<td vAlign="top">Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">5/5</td>
<td vAlign="top" align="middle"><strong>3.98</strong><br>(58 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=17"><font color="#ff7800">NuSphere PhpED</font></a></td>
<td vAlign="top" align="middle">4</td>
<td vAlign="top">Commercial</td>
<td vAlign="top">Windows<br>Linux</td>
<td vAlign="top" align="middle">5/5</td>
<td vAlign="top" align="middle"><strong>4.27</strong><br>(73 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=40"><font color="#ff7800">Maguma Workbench</font></a></td>
<td vAlign="top" align="middle">2.6</td>
<td vAlign="top">Commercial</td>
<td vAlign="top">Windows<br>Linux<br>Mac</td>
<td vAlign="top" align="middle">5/5</td>
<td vAlign="top" align="middle"><strong>4.11</strong><br>(9 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=92"><font color="#ff7800">emacs</font></a></td>
<td vAlign="top" align="middle">21</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows<br>Unix<br>Linux<br>Mac<br>Other</td>
<td vAlign="top" align="middle">5/5</td>
<td vAlign="top" align="middle"><strong>4.07</strong><br>(13 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=91"><font color="#ff7800">ActiveState Komodo</font></a></td>
<td vAlign="top" align="middle">3.5</td>
<td vAlign="top">Commercial<br>Other</td>
<td vAlign="top">Windows<br>Unix<br>Linux<br>Other</td>
<td vAlign="top" align="middle">5/5</td>
<td vAlign="top" align="middle"><strong>4.57</strong><br>(21 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=98"><font color="#ff7800">PHP Designer 2005</font></a></td>
<td vAlign="top" align="middle">3.0.6</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">5/5</td>
<td vAlign="top" align="middle"><strong>4.74</strong><br>(2329 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=164"><font color="#ff7800">Komodo</font></a></td>
<td vAlign="top" align="middle">3.1</td>
<td vAlign="top">Shareware<br>Commercial<br>Other</td>
<td vAlign="top">Windows<br>Linux<br>Other</td>
<td vAlign="top" align="middle">5/5</td>
<td vAlign="top" align="middle"><strong>4.13</strong><br>(22 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=234"><font color="#ff7800">TSW WebCoder 2005</font></a></td>
<td vAlign="top" align="middle">2005</td>
<td vAlign="top">Commercial<br>Other</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">5/5</td>
<td vAlign="top" align="middle"><strong>2</strong><br>(4 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=5"><font color="#ff7800">VIM</font></a></td>
<td vAlign="top" align="middle">6.1</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows<br>Unix<br>Linux</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.23</strong><br>(146 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=6"><font color="#ff7800">DzSoft PHP Editor</font></a></td>
<td vAlign="top" align="middle">1.4</td>
<td vAlign="top">Shareware<br>Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.54</strong><br>(22 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=33"><font color="#ff7800">Davor’s PHP Constructor</font></a></td>
<td vAlign="top" align="middle">1.0</td>
<td vAlign="top">Shareware<br>Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>3.75</strong><br>(4 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=7"><font color="#ff7800">Edit Plus</font></a></td>
<td vAlign="top" align="middle">2.11 SR-2</td>
<td vAlign="top">Shareware<br>Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.67</strong><br>(80 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=8"><font color="#ff7800">HTML-Kit</font></a></td>
<td vAlign="top" align="middle">292</td>
<td vAlign="top">Freeware<br>Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.48</strong><br>(43 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=10"><font color="#ff7800">PHP Expert Editor</font></a></td>
<td vAlign="top" align="middle">2.5</td>
<td vAlign="top">Shareware<br>Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.39</strong><br>(81 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=12"><font color="#ff7800">Anjuta</font></a></td>
<td vAlign="top" align="middle">1.0.1</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Unix<br>Linux</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>3.66</strong><br>(6 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=14"><font color="#ff7800">Bluefish</font></a></td>
<td vAlign="top" align="middle">0.12</td>
<td vAlign="top">Other</td>
<td vAlign="top">Linux</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>3.97</strong><br>(34 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=15"><font color="#ff7800">Quanta Plus</font></a></td>
<td vAlign="top" align="middle">3.2.1</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Linux</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.59</strong><br>(61 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=16"><font color="#ff7800">Zend Studio</font></a></td>
<td vAlign="top" align="middle">5</td>
<td vAlign="top">Commercial</td>
<td vAlign="top">Windows<br>Unix<br>Linux<br>Mac<br>Other</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>3.93</strong><br>(143 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=21"><font color="#ff7800">Kate</font></a></td>
<td vAlign="top" align="middle">2.2</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Linux</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.11</strong><br>(18 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=24"><font color="#ff7800">Maguma Studio Free</font></a></td>
<td vAlign="top" align="middle">1.1.0</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>3.89</strong><br>(47 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=100"><font color="#ff7800">PHP Editor by EngInSite</font></a></td>
<td vAlign="top" align="middle">3</td>
<td vAlign="top">Shareware<br>Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>3</strong><br>(4 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=28"><font color="#ff7800">PHP Eclipse</font></a></td>
<td vAlign="top" align="middle">1.06a</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Unix<br>Linux</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.28</strong><br>(70 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=29"><font color="#ff7800">Xored:: WebStudio</font></a></td>
<td vAlign="top" align="middle">0.3.4</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows<br>Unix<br>Linux<br>Other</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>3.92</strong><br>(25 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=30"><font color="#ff7800">SciTE</font></a></td>
<td vAlign="top" align="middle">1.53</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows<br>Unix<br>Linux<br>Other</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.57</strong><br>(56 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=31"><font color="#ff7800">VS.Php</font></a></td>
<td vAlign="top" align="middle">Beta 3</td>
<td vAlign="top">Commercial<br>Other</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.57</strong><br>(19 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=41"><font color="#ff7800">Maguma Studio Pro</font></a></td>
<td vAlign="top" align="middle">1.3.X</td>
<td vAlign="top">Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4</strong><br>(8 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=52"><font color="#ff7800">Macromedia HomeSite</font></a></td>
<td vAlign="top" align="middle">5.5</td>
<td vAlign="top">Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.5</strong><br>(14 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=56"><font color="#ff7800">TextPad</font></a></td>
<td vAlign="top" align="middle">4.7.2</td>
<td vAlign="top">Freeware<br>Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.51</strong><br>(27 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=66"><font color="#ff7800">PHP Edit</font></a></td>
<td vAlign="top" align="middle">1.0 Stable</td>
<td vAlign="top">Freeware<br>Shareware<br>Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.44</strong><br>(78 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=102"><font color="#ff7800">EngInSite Editor for PHP</font></a></td>
<td vAlign="top" align="middle">2.2</td>
<td vAlign="top">Shareware<br>Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">4/5</td>
<td vAlign="top" align="middle"><strong>4.31</strong><br>(22 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=3"><font color="#ff7800">BBedit</font></a></td>
<td vAlign="top" align="middle">7.0</td>
<td vAlign="top">Commercial</td>
<td vAlign="top">Mac</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.47</strong><br>(17 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=4"><font color="#ff7800">BBedit Lite</font></a></td>
<td vAlign="top" align="middle">6.1</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Mac</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.55</strong><br>(9 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=11"><font color="#ff7800">Cooledit</font></a></td>
<td vAlign="top" align="middle">3.17.7</td>
<td vAlign="top">&nbsp;</td>
<td vAlign="top">&nbsp;</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>3</strong><br>(2 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=13"><font color="#ff7800">Nedit</font></a></td>
<td vAlign="top" align="middle">5.3</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Unix<br>Linux</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.57</strong><br>(7 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=59"><font color="#ff7800">PSPad</font></a></td>
<td vAlign="top" align="middle">4.3.0</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.67</strong><br>(76 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=18"><font color="#ff7800">PHP Coder</font></a></td>
<td vAlign="top" align="middle">3</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>3.89</strong><br>(64 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=25"><font color="#ff7800">AceHTML Pro</font></a></td>
<td vAlign="top" align="middle">5</td>
<td vAlign="top">Shareware<br>Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4</strong><br>(10 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=35"><font color="#ff7800">Top PHP Studio</font></a></td>
<td vAlign="top" align="middle">v1.19.6</td>
<td vAlign="top">Shareware<br>Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.33</strong><br>(6 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=34"><font color="#ff7800">jEdit</font></a></td>
<td vAlign="top" align="middle">4.1</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows<br>Unix<br>Linux<br>Mac<br>Other</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.62</strong><br>(72 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=39"><font color="#ff7800">SubEthaEdit</font></a></td>
<td vAlign="top" align="middle">1.1.5</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Mac</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.5</strong><br>(10 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=43"><font color="#ff7800">umdev</font></a></td>
<td vAlign="top" align="middle">2004</td>
<td vAlign="top">Shareware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>2.33</strong><br>(3 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=44"><font color="#ff7800">Dev-PHP</font></a></td>
<td vAlign="top" align="middle">3.0</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.48</strong><br>(56 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=45"><font color="#ff7800">Crimson Editor</font></a></td>
<td vAlign="top" align="middle">3.60</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.70</strong><br>(47 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=46"><font color="#ff7800">PHP Processor</font></a></td>
<td vAlign="top" align="middle">1.2</td>
<td vAlign="top">Shareware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>5</strong><br>(1 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=51"><font color="#ff7800">tsWebEditor</font></a></td>
<td vAlign="top" align="middle">2</td>
<td vAlign="top">Freeware<br>Other</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.61</strong><br>(13 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=54"><font color="#ff7800">Svoi.NET - PHP Edit XP</font></a></td>
<td vAlign="top" align="middle">4.0</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.16</strong><br>(18 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=61"><font color="#ff7800">ConTEXT</font></a></td>
<td vAlign="top" align="middle">0.97.4</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.70</strong><br>(24 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=73"><font color="#ff7800">PHP Side (Simple IDE)</font></a></td>
<td vAlign="top" align="middle">0.4</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows<br>Unix<br>Linux</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.07</strong><br>(13 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=74"><font color="#ff7800">HAPedit</font></a></td>
<td vAlign="top" align="middle">3.1</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.44</strong><br>(18 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=76"><font color="#ff7800">EmEditor</font></a></td>
<td vAlign="top" align="middle">4.0</td>
<td vAlign="top">Freeware<br>Shareware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4</strong><br>(4 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=94"><font color="#ff7800">Roadsend Studio</font></a></td>
<td vAlign="top" align="middle">1.1.1</td>
<td vAlign="top">Commercial</td>
<td vAlign="top">Windows<br>Unix<br>Linux</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>1</strong><br>(1 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=82"><font color="#ff7800">TruStudio</font></a></td>
<td vAlign="top" align="middle">1.0.0.</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows<br>Unix<br>Linux<br>Mac</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>3.33</strong><br>(9 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=111"><font color="#ff7800">Smultron</font></a></td>
<td vAlign="top" align="middle">1.0.1</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Mac</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>4.28</strong><br>(7 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=136"><font color="#ff7800">PHP backend generator</font></a></td>
<td vAlign="top" align="middle">0.9</td>
<td vAlign="top">Commercial</td>
<td vAlign="top">Windows<br>Unix<br>Linux<br>Mac<br>Other</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>1</strong><br>(1 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=218"><font color="#ff7800">PHPMaker</font></a></td>
<td vAlign="top" align="middle">3.2</td>
<td vAlign="top">Shareware<br>Commercial</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>5</strong><br>(1 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=225"><font color="#ff7800">Pidela</font></a></td>
<td vAlign="top" align="middle">0.1</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows<br>Unix<br>Linux<br>Mac</td>
<td vAlign="top" align="middle">3/5</td>
<td vAlign="top" align="middle"><strong>1</strong><br>(1 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=9"><font color="#ff7800">Arisesoft Winsyntax</font></a></td>
<td vAlign="top" align="middle">2</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">2/5</td>
<td vAlign="top" align="middle"><strong>4.12</strong><br>(25 votes)</td></tr>
<tr>
<td vAlign="top" align="left"><a href="http://www.php-editors.com/review/?editor=101"><font color="#ff7800">SEG</font></a></td>
<td vAlign="top" align="middle">1.0.1</td>
<td vAlign="top">Freeware</td>
<td vAlign="top">Windows</td>
<td vAlign="top" align="middle">2/5</td>
<td vAlign="top" align="middle"><strong>4.46</strong><br>(13 votes)</td></tr></tbody></table></div>]]></description>
            <pubDate>Tue, 11 Nov 2008 20:28:30 +0800</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1630]]></guid>
         </item>         <item>
            <title><![CDATA[月流量100GB的免費CPanel虛擬主機，PHP5+MySQL5，還可用FTP傳檔及貼圖外連！]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1629]]></link>
            <description><![CDATA[<p>蝦密！沒看錯吧！竟然有使用CPanel的免費虛擬主機！而且流量還有100GB，又可以用FTP上傳，更讚的是圖片還可以外連，PHP 5.2 + MySQL 5.0 + Perl 還是基本配備喔！這麼好的條件，即時你沒玩過虛擬主機、沒當過站長，也趕快去申請幾個玩玩吧！不玩實在太可惜囉～</p>
<p>&nbsp; <a class="external" href="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_3.png"><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="295" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_thumb_3.png" width="368" border="0"/></a></p>
<p><span id="more-265"></span></p>
<p>阿正老師之前寫過 <a href="http://blog.soft.idv.tw/?p=31"><font color="#0080ff">免費好用又超快的虛擬主機 — Hyperphp.com</font></a> 及 <a href="http://blog.soft.idv.tw/?p=32"><font color="#0080ff">hyperphp快速架站：五分鐘架好你的PHP+MySQL網站</font></a> 等兩篇文章，教大家如何用免費的虛擬主機來架站。不過免費的東西總是有些風險，hyperphp之後改成網頁會置入廣告，相當不便。</p>
<p>這邊介紹一個不錯的免費的虛擬主機，不但流量大得驚人(100GB/月)，還用了目前主流的虛擬主機管理系統–Cpanel，功能相當的完整，沒有玩過虛擬主機的玩家，可以去申請一個免費的帳號來玩玩看，反正圖片還可以外連，當成貼圖主機也不賴喔！</p>
<h4>網站資料</h4>
<table cellSpacing="0" cellPadding="2" width="498" border="1">
<tbody>
<tr>
<td vAlign="top" width="133">官方網站：</td>
<td vAlign="top" width="363"><a class="external" title="http://www.000webhost.com/" href="http://www.000webhost.com/" target="_blank"><font color="#0080ff">http://www.000webhost.com/</font></a></td></tr>
<tr>
<td vAlign="top" width="133">空間/月流量</td>
<td vAlign="top" width="363">350MB / <strong><font color="#ff0000">100GB!</font></strong></td></tr>
<tr>
<td vAlign="top" width="133">主機位置</td>
<td vAlign="top" width="363">Scranton (斯克蘭頓), 賓州, USA</td></tr>
<tr>
<td vAlign="top" width="133">免費網域</td>
<td vAlign="top" width="363">net78.net</td></tr>
<tr>
<td vAlign="top" width="133">主機類型</td>
<td vAlign="top" width="363">Linux , 2.6.25核心</td></tr>
<tr>
<td vAlign="top" width="133">控制台</td>
<td vAlign="top" width="363"><font color="#ff0000">CPanel</font> !</td></tr>
<tr>
<td vAlign="top" width="133">HTTP下載速度</td>
<td vAlign="top" width="363">多線程最高約400KB/s(即4Mbps) <br>平均約200~300KB/s</td></tr>
<tr>
<td vAlign="top" width="133">FTP上傳</td>
<td vAlign="top" width="363">支援，上傳速度100~200KB/s <br>下載約30~40KB/s</td></tr>
<tr>
<td vAlign="top" width="133">圖片外連</td>
<td vAlign="top" width="363">可</td></tr>
<tr>
<td vAlign="top" width="133">主機host客戶數量</td>
<td vAlign="top" width="363">約400個domains</td></tr>
<tr>
<td vAlign="top" width="133">ping 值(從Hinet)</td>
<td vAlign="top" width="363">約230~240ms</td></tr>
<tr>
<td vAlign="top" width="133">tracert 節點數</td>
<td vAlign="top" width="363">16點</td></tr>
<tr>
<td vAlign="top" width="133">主機存活率(uptime)</td>
<td vAlign="top" width="363">97.x%</td></tr>
<tr>
<td vAlign="top" width="133">PHP版本</td>
<td vAlign="top" width="363">5.2 / 支援GD, mail(), Zend, Curl…</td></tr>
<tr>
<td vAlign="top" width="133">MySQL版本</td>
<td vAlign="top" width="363">5.0.45-community / 5個資料庫</td></tr>
<tr>
<td vAlign="top" width="133">信箱</td>
<td vAlign="top" width="363">Web-based, POP3</td></tr>
<tr>
<td vAlign="top" width="133">廣告</td>
<td vAlign="top" width="363">無！</td></tr>
<tr>
<td vAlign="top" width="133">系統規格</td>
<td vAlign="top" width="363"><a class="external" href="http://runpc.net78.net/iprobe/" target="_blank"><font color="#0080ff">http://runpc.net78.net/iprobe/</font></a></td></tr>
<tr>
<td vAlign="top" width="133">完整規格</td>
<td vAlign="top" width="363"><a class="external" title="http://www.000webhost.com/features" href="http://www.000webhost.com/features" target="_blank"><font color="#0080ff">http://www.000webhost.com/features</font></a></td></tr>
<tr>
<td vAlign="top" width="133">安裝程式</td>
<td vAlign="top" width="363">Fantastico Autoinstaller <br>提供wordpress、phpBB等八套網站程式自動安裝</td></tr>
<tr>
<td vAlign="top" width="133">&nbsp;</td>
<td vAlign="top" width="363">&nbsp;</td></tr>
<tr>
<td vAlign="top" width="133">備註</td>
<td vAlign="top" width="363">
<ul>
<li>網路測速使用Hinet FTTB 10M/2M 
<li>無法使用HTTP下載.exe檔案(需先改副檔名) 
<li>官方網頁上寫的硬碟容量是250MB，實際上是350MB </li></ul></td></tr></tbody></table>
<p><strong></strong></p>
<p><a class="external" href="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image.png"><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="400" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_thumb.png" width="414" border="0"/></a>(點圖可放大)</p>
<h4>申請方式</h4>
<p>到000webhost官方網站，按下畫面右下角的「Sign Up」按鈕，即可進行註冊。</p>
<p><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="438" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_4.png" width="386" border="0"/> </p>
<p>填好之後，系統會寄一封認證信給你，如下圖：</p>
<p><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="276" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_5.png" width="473" border="0"/> </p>
<p>點選信中的認證連結，即可完成認證，認證之後便可以登入CPanel控制台首頁了。</p>
<p>CPanel控制台介紹</p>
<p>000webhost使用的是精簡過的CPanel，目前外面的免費虛擬主機大多是使用Layer Panel或Vista Panel，都沒有專業的CPanel來得好用。CPanel的功能主要可分成以下幾個部份：</p>
<ul>
<li>Main Menu：主選單 <br><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="98" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_6.png" width="480" border="0"/>&nbsp; <br>提供帳號的相關資訊、變更密碼等服務 
<li>Domains：網域 <br><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="101" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_7.png" width="482" border="0"/> <br>可以新增子網域(subdomains)、附加網域(Add-on)或網域寄放(Parked) 
<li>Email / Stats :信箱/狀態 <br><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="97" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_8.png" width="478" border="0"/> 
<li>Files：檔案 <br><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="99" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_9.png" width="480" border="0"/> <br>可使用web的檔案管理員(File Manger)來管理檔案，或查看磁碟使用率，以及做備份。 
<li>Software/Services:軟體/服務 <br><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="98" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_10.png" width="479" border="0"/> <br>提供了方便的網站軟體安裝，以及資料庫管理 
<li>Advanced：進階設定 <br><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="99" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_11.png" width="479" border="0"/> <br>可做資料夾密碼的保護、定時處理工作、網頁導向或IP阻擋 
<li>Account Tools：帳號工具 <br><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="96" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_12.png" width="482" border="0"/> <br>提供清理帳號、修復檔案所有人、權限、及系統紀錄等功能 
<li>Account Information : 帳戶資訊 <br><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="287" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_13.png" width="255" border="0"/> <br>顯示目前硬碟的使用率，及相關系統資訊 </li></ul>
<h4>新增一個自己的網站軟體</h4>
<p>如果你從沒接觸過虛擬主機，或不知道什麼是PHP,MySQL，你可以先利用「Fantastico Autoinstaller」的功能來幫你安裝網站軟體。</p>
<p>按下「Fantastico Autoinstaller」圖示後，會出現八種可自動安裝的軟體(比起付費的CPanel少了很多)，我先以wordpress這套有名的部落格系統為例(也就是本站所使用的軟體)，按下「New Installation」按鈕，如下圖：</p>
<p><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="309" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_14.png" width="400" border="0"/> </p>
<p>輸入要安裝的路徑，如輸入 blog，則你的wordpress網站就會在 http://你的帳號.net78.net/blog</p>
<p>接著輸入管理員帳號及密碼，按下 〔Install Wordpress〕按鈕即可。</p>
<p><a class="external" href="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_15.png"><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="390" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_thumb_4.png" width="393" border="0"/></a> </p>
<p>完成之後，系統會提醒你稍待兩分鐘，即可安裝完成。輸入前面介紹的網址，就能進入你的wordpress部落格系統中，很簡單吧！</p>
<p><a class="external" href="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_16.png"><img title="image" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="141" alt="image" src="http://csg.yu-img.com/blog_images/2008/100GBCPanelPHP5MySQL5ftp_911/image_thumb_5.png" width="399" border="0"/></a> </p>
<h4>小結</h4>
<p>看了以上的介紹，是不是意猶未盡呢？阿正老師這邊先小賣一個關子，等大家體驗到這個免費虛擬主機的好用之處之後，我再來介紹如何用FTP及Web介面快速上傳圖片，讓你以後在論壇、或寫blog不再找不到地方貼圖，一些小檔案放在網頁上跟親朋好友分享也更加方便喔～ (100GB的流量要用完也是不太容易的啦）</p>]]></description>
            <pubDate>Tue, 11 Nov 2008 20:23:57 +0800</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1629]]></guid>
         </item>         <item>
            <title><![CDATA[PHP相關網站介紹]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1628]]></link>
            <description><![CDATA[<p>最近因緣際會，開始寫起了很久未從事的Coding工作，而且碰的是沒接觸過的PHP+MySQL。幸好，仰賴以往大型資訊系統的開發經驗與紮實的邏輯訓練，及資料庫相關觀念與使用經驗，雖沒有PHP的實際經驗，但卻感覺與以往熟悉的ASP也相距不多，因而很快能夠上手。</p>
<p>在這過程中，也有些許的跌跌撞撞，但爬一爬文，也都安然度過，也因而發現了一些不錯的網站與文章。</p>
<p>網站將分批蒐錄在本文中，而文章則另文張貼。</p>
<p><a href="http://www.000webhost.com/order.php">http://www.000webhost.com/order.php</a></p>
<p>免費的PHP+MySQL網路空間，空間夠大，網路速度夠快，沒有廣告。</p>
<p>&nbsp;</p>]]></description>
            <pubDate>Tue, 11 Nov 2008 20:21:11 +0800</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1628]]></guid>
         </item>         <item>
            <title><![CDATA[101高峰會-親職教育-洪蘭]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1627]]></link>
            <description><![CDATA[2008/11/1 pm11-12 TBVS 101高峰會專訪洪蘭 談親職教育 要點列序<br>1.我們的社會太注重分數，分數代表的意義不大<br>2.一個人是否說謊，看眼睛，說謊時瞳孔會放大。還有當不喜歡一個人時，會避開他的眼睛。<br>3.正面的獎勵勝過負面的處罰。<br>4.太謙虛反顯自信不足。<br>5.避免僵化！劃地自限。<br>6.改變從教育開始。<br>7.從欣賞的眼光看小孩。<br>8.有滿足孩子的好奇心的自由度。<br>9.手放鬆，口少念。<br>10.不打發小孩，把握孩子以父母為天地的時間，這樣的時間很珍貴。<br>11.安全感勝過家財萬貫。<br>12.進小學前做好身教，言教。<br>13.品格教育要從小開始。<br>14.充實的一天，帶來好眠。充實的一生，帶來安息。<br>15.品格、敬業決定一切。<br>16.品格是逐日形成的。<br>17.品格＋閱讀，從小做起。<br>18.以上台報告，說出看法的方式做評量是較好的方式。網路找的到的是資訊，從自己腦裡組織過，嘴說出才是你的知識。<br>19.要有勇氣，讓小孩作夢。<br>20.身教是最好的品德教育。<br>21.無欲則剛。<br>22.不要愛惜勞力。<br>23.要孩子怎樣，自己先那樣。<br>24.閱讀要內化，知識才會提升。<br>25.說話是本能，閱讀是習慣。<br>26.孩子是父母一生最大的投資。<br>27.教育非金錢能衡量。<br>28.陪伴成長，父母地位無可取代。<br>]]></description>
            <pubDate>Tue, 11 Nov 2008 20:02:15 +0800</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1627]]></guid>
         </item>         <item>
            <title><![CDATA[家中的新成員]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1579]]></link>
            <description><![CDATA[<br><br><br>
<p><img src="http://tw.blog.yahoo.com/photo/photo.php?id=Npy.h4iZGx9H2ZAzVaP6ogWghcB3Jta.&amp;photo=tn_F23_20081004095837123.jpg"/></p>
<p>拉拉，家裡的新成員，是米克斯拉，狗如其名，健康好動，會吃會拉。</p>
<p>才剛來就遇到多年難得一見的秋颱，一週一個。</p>
<p><img src="http://tw.blog.yahoo.com/photo/photo.php?id=Npy.h4iZGx9H2ZAzVaP6ogWghcB3Jta.&amp;photo=tn_F23_20081004095906541.jpg"/></p>
<p>來的時候還不滿兩個月大，目前為止也尚未滿三個月，好玩，不犧牲一下手指頭，很難讓他專心入鏡。</p>
<p><img src="http://tw.blog.yahoo.com/photo/photo.php?id=Npy.h4iZGx9H2ZAzVaP6ogWghcB3Jta.&amp;photo=tn_F23_20081004095705350.jpg"/></p>
<p>怕他感受不到新家的溫暖，藉台北公務行程，買了這輩子不曾想過會買的工具：氣動釘槍、電鋸...</p>
<p>網路上查些資料(很難)，動手畫了草圖，</p>
<p>利用週休二日加上意外的星期一颱風假，幫他蓋了一間木屋，這是半成品。</p>
<p><img src="http://tw.blog.yahoo.com/photo/photo.php?id=Npy.h4iZGx9H2ZAzVaP6ogWghcB3Jta.&amp;photo=tn_F23_20081004100102577.jpg"/></p>
<p>終於完成，也玩出了心得與興趣。將來，我會持續家庭木工DIY，很有成就感。剩下的工作，大概只剩下上漆了。打算漆成跟我們房子及信箱一樣的顏色，將會是很地中海的藍與白。</p>]]></description>
            <pubDate>Sat, 04 Oct 2008 22:29:48 +0800</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1579]]></guid>
         </item>         <item>
            <title><![CDATA[麗星郵輪停靠在馬公港]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1491]]></link>
            <description><![CDATA[<div><br>
<h2><span>麗星郵輪停靠在馬公港</span> </h2>
<div>
<div>分類：<a href="http://tw.myblog.yahoo.com/waian-950604/archive?l=f&amp;id=23"><font color=#4b97ad>澎湖好好玩</font></a></div>
<div>2007/07/07 12:33</div></div>
<div>
<div>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f><span style="FONT-SIZE:11pt;"><font color=#00007f>麗星郵輪&quot;</font></span>天秤星號&quot;於<span>2007 年6月29 日到達基隆港，這是嶄新登場且人氣旺盛的兩夜澎湖假期(週二航次)。</span></font></strong></span></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f><span></span></font></strong></span></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709111108379.jpg?TTspbkGBvSJDihqi"/></font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f>麗星郵輪於今天早晨<span>6點到達馬公港，下五5點才離去；但是只有200張的邀請卡才能登船參觀，所以欣賞大船的風采就好吧！</span></font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f><span><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709111327101.jpg?TTspbkGBfQXWyjBa"/></span></font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f><span></span></font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f>&quot;今一之星&quot;也在中午到達馬公港</font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709111443378.jpg?TTspbkGBq3UcjM5g"/></span></strong></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f>麗星郵輪&quot;天秤星號&quot;和&quot;今一之星&quot;比大小囉!</font></strong></span></p>
<span style="FONT-SIZE:11pt;"></span>
<p><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709111618199.jpg?TTspbkGBS0KXYz8u"/></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f>從嘉義布袋的&quot;今一之星&quot;也在中午到達馬公港</font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709111747727.jpg?TTspbkGBUGASQ7ct"/></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f><span style="FONT-SIZE:11pt;">馬公港停擺著 麗星郵輪和&quot;</span>今一之星&quot;</font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709111911918.jpg?TTspbkGBegIEa2SK"/></font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f>從嘉義布袋的&quot;今一之星&quot;也在中午到達馬公港...乘客不少喔!</font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709112108742.jpg?TTspbkGBtrhk9LyC"/></span></strong></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f>麗星郵輪「天秤星號」前面的雄姿</font></strong></span></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709112306435.jpg?TTspbkGBMDOOzYSi"/></font></strong></span></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f>麗星郵輪「天秤星號」各個角度都很壯觀呢!</font></strong></span></p>
<p><span style="FONT-SIZE:11pt;"><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709112422978.jpg?TTspbkGBebJSRn6Z"/></span></p>
<p><font color=#00007f><span style="FONT-SIZE:11pt;"><strong>麗星郵輪「天秤星號」依現代旅客的需求而設計，屬世界級海上度假設施。可容納<span>1480人的「天秤星號」，共有740 間客房，艙房種類分為六大種，旅客可依個人需求選擇最適合自己的客房。船上所提供的設施及活動，包括國際性的表演、主題派對、各國豐盛美味的餐飲、健身中心、高爾夫球練習場、游泳池、運動甲板以及一連串炫麗的娛樂表演，絕對讓旅客眼花撩亂，隨時隨地High翻天。</span></strong></span></font></p>
<p><font color=#00007f><span style="FONT-SIZE:11pt;"><strong><span><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709115452613.jpg?TTspbkGBV9y2P_Vc"/></span></strong></span></font></p>
<p><font color=#00007f><span><strong><span style="FONT-SIZE:11pt;">&quot;天秤星號&quot;概要：</span></strong></span><strong><span style="FONT-SIZE:11pt;">．總排水量：</span><span style="FONT-SIZE:11pt;FONT-FAMILY:'Times New Roman';">42,000</span><span style="FONT-SIZE:11pt;">噸　．長度：</span><span style="FONT-SIZE:11pt;FONT-FAMILY:'Times New Roman';">216</span><span style="FONT-SIZE:11pt;">公尺　．闊度：</span><span style="FONT-SIZE:11pt;FONT-FAMILY:'Times New Roman';">28</span><span style="FONT-SIZE:11pt;">公尺　．平均航行速度：</span><span style="FONT-SIZE:11pt;FONT-FAMILY:'Times New Roman';">19</span><span style="FONT-SIZE:11pt;">海里　．平衡裝置：</span><span style="FONT-SIZE:11pt;FONT-FAMILY:'Times New Roman';">1</span><span style="FONT-SIZE:11pt;">對　．船首船尾推進器：</span><span style="FONT-SIZE:11pt;FONT-FAMILY:'Times New Roman';">2</span><span style="FONT-SIZE:11pt;">個　．全衛星導航系統：</span><span style="FONT-SIZE:11pt;FONT-FAMILY:'Times New Roman';">2</span><span style="FONT-SIZE:11pt;">個　．客房數量：</span><span style="FONT-SIZE:11pt;FONT-FAMILY:'Times New Roman';">740</span><span style="FONT-SIZE:11pt;">間　．載客量</span><span style="FONT-SIZE:11pt;FONT-FAMILY:'Times New Roman';">(</span><span style="FONT-SIZE:11pt;">下舖床位</span><span style="FONT-SIZE:11pt;FONT-FAMILY:'Times New Roman';">)</span><span style="FONT-SIZE:11pt;">：</span><span style="FONT-SIZE:11pt;FONT-FAMILY:'Times New Roman';">1,480</span><span style="FONT-SIZE:11pt;">人</span></strong></font></p>
<p><font color=#00007f><strong><span style="FONT-SIZE:11pt;"><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709115600325.jpg?TTspbkGBwYcSrUk7"/></span></strong></font></p>
<p><font color=#00007f><strong><span style="FONT-SIZE:11pt;">麗星郵輪據說有<span>10層樓高，吉美度假村原來是馬公港的地標，現在似乎變小囉！</span></span></strong></font></p>
<p><font color=#00007f><strong><span style="FONT-SIZE:11pt;"><span><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709115659226.jpg?TTspbkGBPBxW2Hul"/></span></span></strong></font></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f>麗星公司表示，天秤星澎湖遊今年排定</font><span><font color=#00007f>4梯次，七月四日、十八日、八月一日、十五日。</font>&nbsp;&nbsp;</span></strong></span></p>
<p><span style="FONT-SIZE:11pt;"><strong><span><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709115810318.jpg?TTspbkGBlgAF0ztv"/></span></strong></span></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f>8000至2萬元不等價位的套裝行程，麗星也安排澎湖島上旅遊，包括；環島、北海、南海3種不同路線；船上乘客1100多人，大夥幾乎都下船瞧瞧澎湖島的模樣，尤其對澎湖生猛海鮮最有興趣。</font></strong></span></p>
<p><span style="FONT-SIZE:11pt;"><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709120036357.jpg?TTspbkGBtNFOrmoE"/></span></p>
<p><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709120037177.jpg?TTspbkGB2Sckvisc"/></p>
<p><br><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709120038415.jpg?TTspbkGB9iYWmkP0"/></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f>從布袋來的&quot;滿天星&quot;在中午也來到馬公港</font></strong></span></p>
<p><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709120500314.jpg?TTspbkGBNvmnYsEI"/></p>
<p><font color=#00007f><strong><span style="FONT-SIZE:11pt;">&quot;滿天星&quot; 船程：嘉義<span> &lt;-&gt; 澎湖 (32 浬 ) <span>&nbsp;</span>乘船港埠： 布袋港 &lt;-&gt; 馬公港<span>&nbsp; </span>航行時間： 70 分鐘 ( 六級風以內 )<span>&nbsp; </span>客位： 352 位<span>&nbsp; </span>船長： 38.8 公尺<span>&nbsp; </span>船級： NK 大海型　船行穩定</span></span></strong></font></p>
<p><font color=#00007f><strong><span style="FONT-SIZE:11pt;"><span><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709120501738.jpg?TTspbkGBJ7Uid18b"/></span></span></strong></font></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f>&quot;滿天星&quot;也載滿很多遊客喔！</font></strong></span></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709120502936.jpg?TTspbkGBi7gbiYu2"/></font></strong></span></p>
<p><font color=#00007f><span style="FONT-SIZE:11pt;"><strong>&quot;滿天星&quot;正在加油呢！</strong></span></font></p>
<p><font color=#00007f><span style="FONT-SIZE:11pt;"><strong><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709120504151.jpg?TTspbkGBB4KR_8gJ"/></strong></span></font></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709121012836.jpg?TTspbkGBWORYVGDH"/></font></strong></span></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f>馬公的漁人碼頭彩繪的儲油筒是美麗景觀喔!</font></strong></span></p>
<p><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709121014745.jpg?TTspbkGBl2Ne9pKP"/></p>
<p><img src="http://tw.f14.yahoofs.com/myper/cFmpqrqcAALFeDppuUcuEcp4RFuafw--/blog/ap_20070709121015545.jpg?TTspbkGBPyYp3IJH"/></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f>漁人碼頭的地標...可以找到很多&quot;魚&quot;喔!</font></strong></span></p>
</div></div></div>]]></description>
            <pubDate>Mon, 09 Jul 2007 12:18:43 +0800</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1491]]></guid>
         </item>         <item>
            <title><![CDATA[通樑大榕樹及跨海大橋]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1489]]></link>
            <description><![CDATA[<h2><span>通樑大榕樹及跨海大橋</span> </h2>
<div>
<div>分類：<a href="http://tw.myblog.yahoo.com/jw!avRU7l.QAwShChF1u0v86rcg/archive?l=f&amp;id=106"><font color=#45301f>澎湖風景</font></a></div>
<div>2007/06/27 22:10</div></div>
<div>
<p><font color=#00007f><strong><span style="FONT-SIZE:11pt;">通樑大榕樹位於澎湖白沙島，緊鄰跨海大橋，已有二百多年歷史，是澎湖最老最大之一顆神木。位於白沙鄉通樑村保安宮前，樹齡已逾三百年。通樑古榕已是聞名遐邇，且為「澎湖精神」象徵。</span></strong><strong><span></span></strong></font></p>
<p><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627094158548.jpg?TTihyjGBcudir1U8"/></p>
<p><font color=#00007f><strong><span style="FONT-SIZE:11pt;">相傳清康熙年間有商船航經澎湖，於通樑吼門水道遇難沈沒，僅餘一株榕苗漂至海岸，為鄉人拾植於廟前，歷三百餘年歲月風霜而蔚為今日覆蓋面積廣達</span></strong><strong><span style="FONT-SIZE:11pt;FONT-FAMILY:Georgia;">660</span></strong><strong><span style="FONT-SIZE:11pt;">餘平方公尺的奇觀。</span></strong></font></p>
<p><font color=#00007f><strong><span style="FONT-SIZE:11pt;"></span></strong></font>&nbsp;</p>
<p><font color=#00007f><strong><span style="FONT-SIZE:11pt;"></span></strong></font><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627094156133.jpg?TTihyjGB5s9cNrri"/></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f>通樑老樹的眾多粗壯氣根</font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f></font></span></strong>&nbsp;</p>
<p><strong><span style="FONT-SIZE:11pt;"></span></strong><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627094154242.jpg?TTihyjGBcowa.htL"/></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f>通樑老樹的原始樹頭</font></strong></span></p>
<p><span style="FONT-SIZE:11pt;"></span><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627094152825.jpg?TTihyjGB8jKhLKsJ"/></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f>通樑老樹的枝幹盤纏錯綜複雜</font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f></font></span></strong>&nbsp;</p>
<p><strong><span style="FONT-SIZE:11pt;"></span></strong><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627094150700.jpg?TTihyjGBRiQJ8__d"/></p>
<p><span style="FONT-SIZE:11pt;"><strong><font color=#00007f>古榕形成的原因，是由於受到東北季風風勢影響，使樹枝長到一定高度便呈橫向生長，而氣根自然下垂及地後，又長成新幹，歷經三百多年，便造成今日盛大的局面。為了保護枝幹，通樑老樹的每一根樹枝都用木板包圍起來，中間並搭起木架子及支柱支撐巨樹，形成特殊景致。</font></strong></span></p>
<p><span style="FONT-SIZE:11pt;"></span><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627094148797.jpg?TTihyjGBrDCMjKhz"/></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f>通樑老榕樹的整棵超大樹</font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;"><font color=#00007f></font></span></strong>&nbsp;</p>
<p><strong><span style="FONT-SIZE:11pt;"></span></strong><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627094403414.jpg?TTihyjGBeAOii3jS"/></p>
<p><strong><span style="FONT-SIZE:11pt;COLOR:maroon;"><font color=#00007f>通樑老榕樹的整體外觀</font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;COLOR:maroon;"><font color=#00007f></font></span></strong><br><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627094146749.jpg?TTihyjGBQOFWR0Qv"/></p>
<p><strong><span style="FONT-SIZE:11pt;COLOR:maroon;"><font color=#00007f>通樑港口碼頭</font></span></strong><br><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627093902561.jpg?TTihyjGBqBRAympS"/></p>
<p><br><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627093900854.jpg?TTihyjGBrc3rcRIF"/></p>
<p><br><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627093858916.jpg?TTihyjGBgOEtr3M5"/></p>
<p><strong><span style="FONT-SIZE:11pt;COLOR:maroon;"><font color=#00007f>通樑港口碼頭</font></span></strong></p>
<p><strong><span style="FONT-SIZE:11pt;COLOR:maroon;"><font color=#00007f></font></span></strong><br><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627093856796.jpg?TTihyjGBxQNkhrwq"/></p>
<p><span style="FONT-SIZE:11pt;COLOR:maroon;"><strong><font color=#00007f>跨海大橋(白雲形態變化莫測喔!)</font></strong></span></p>
<p><span style="FONT-SIZE:11pt;COLOR:maroon;"></span><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627093836723.jpg?TTihyjGBAHNK_mnn"/></p>
<p><span style="FONT-SIZE:11pt;COLOR:maroon;"><strong><font color=#00007f>通過跨海大橋可到達西嶼(漁翁島)</font></strong></span></p>
<p><span style="FONT-SIZE:11pt;COLOR:maroon;"></span><br><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627093834940.jpg?TTihyjGB5B1bZSpT"/></p>
<p><span style="FONT-SIZE:11pt;COLOR:maroon;"><strong><font color=#00007f>跨海大橋旁有一道彩虹出現喔!</font></strong></span><br><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627093831343.jpg?TTihyjGB_tCH0tEW"/></p>
<p><span style="FONT-SIZE:11pt;COLOR:maroon;"><strong><font color=#00007f>美麗彩虹讓shine開心一整天喔!</font></strong></span><br><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070627093821765.jpg?TTihyjGBNRlOxsUD"/><br></p>
<p><span style="FONT-SIZE:11pt;"></span>
<p><strong><span style="FONT-SIZE:11pt;COLOR:#441415;FONT-FAMILY:Georgia;"></span></strong>&nbsp;</p>
<p><strong><span style="FONT-SIZE:11pt;COLOR:#441415;FONT-FAMILY:Georgia;"></span></strong>&nbsp;</p>
<p><strong><span style="FONT-SIZE:11pt;COLOR:#441415;FONT-FAMILY:Georgia;">PS...shine</span></strong><strong><span style="FONT-SIZE:11pt;COLOR:#441415;">的祖厝在天后宮旁</span></strong><strong><span style="FONT-SIZE:11pt;COLOR:#441415;FONT-FAMILY:Georgia;">,</span></strong><strong><span style="FONT-SIZE:11pt;COLOR:#441415;">現為</span></strong><span><a href="http://ai-house.myweb.hinet.net/"><span style="FONT-SIZE:11pt;"><font color=#45301f>愛鄉民宿</font></span></a></span><strong><span style="FONT-SIZE:11pt;COLOR:#441415;FONT-FAMILY:Georgia;">,</span></strong><strong><span style="FONT-SIZE:11pt;COLOR:#441415;">交通非常方便</span></strong><strong><span style="FONT-SIZE:11pt;COLOR:#441415;FONT-FAMILY:Georgia;">,</span></strong><span style="FONT-SIZE:7pt;"></span></p>
<p><strong><span style="FONT-SIZE:11pt;COLOR:#441415;">請電恰</span></strong><strong><span style="FONT-SIZE:11pt;COLOR:#441415;FONT-FAMILY:Georgia;">06-9279296 </span></strong><strong><span style="FONT-SIZE:11pt;COLOR:#441415;">或</span></strong><strong><span style="FONT-SIZE:11pt;COLOR:#441415;FONT-FAMILY:Georgia;"> 0935222971</span></strong></p>
</div>]]></description>
            <pubDate>Sat, 07 Jul 2007 13:31:36 +0800</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1489]]></guid>
         </item>         <item>
            <title><![CDATA[澎湖古厝保留區 ---二崁聚落]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1487]]></link>
            <description><![CDATA[澎湖古厝保留區 ---二崁聚落 
<div>
<div>分類：<a href="http://tw.myblog.yahoo.com/jw!avRU7l.QAwShChF1u0v86rcg/archive?l=f&amp;id=106"><font color=#45301f>澎湖風景</font></a></div>
<div>2007/02/27 18:44</div></div>
<div>
<p><strong><font color=#441415>西嶼鄉二崁村位在一片崗丘平原後方的凹地，坐西北朝東南的方向正好避開冬天的東北季風。全村大多姓陳。 (2007.2月)</font></strong></p>
<p><strong><font color=#441415>在村落邊界設有五營旗，具有保護聚落不受妖邪侵擾的象徵意義。在二崁，五營旗的位置曾隨人口增加而擴大範圍三次，但由於人口外流，留在聚落中的居民不到百人，如今五營鎮守的只剩下空蕩蕩的村落。 <br><br><br><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225083757591.jpg?TTKWyjGBwmC3Bgts"/></font></strong></p>
<p><strong><font color=#441415></font></strong>&nbsp;</p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225083749290.jpg?TTKWyjGBWU386uLS"/><br></font></strong></p>
<p><br><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225083754984.jpg?TTKWyjGBX4aERjIN"/></font></strong></p>
<p><font color=#441415><strong>二崁杏仁茶古厝店面...<font color=#441415>在二崁除了喝杏仁茶可以養生之外，還可以順便欣賞古厝，看到古老的家具以及古早床<br></font></strong></font></p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225090033811.jpg?TTKWyjGBqa6p9mhV"/></font></strong></p>
<p><strong><font color=#441415>有好幾個陶板或木板上面寫著古詩詞歌謠，這是掛在牆上其中的一個。(用閩南話唸唸看)</font></strong></p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225090031306.jpg?TTKWyjGBT.z2tKNi"/></font></strong></p>
<p><strong><font color=#441415>(用閩南話唸唸看)<br><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225090030713.jpg?TTKWyjGBQgAtW2gu"/></font></strong></p>
<p><strong><font color=#441415>(用閩南話唸唸看)</font></strong></p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225090028907.jpg?TTKWyjGBOqHuEgEp"/></font></strong></p>
<p><strong><font color=#441415>二崁聚落是閩南式的建築，三條橫巷通往北端的二興宮，民宅面向巷道而建，各民宅間僅留一米寬的縱巷為間隔。由空中鳥瞰可以清楚看見這種梳式布局。這種工整的排列方式具有調節氣候及防禦外敵的優點。冬天擋開冰冷的東北風，夏季可讓涼爽的西南風灌入。 </font></strong></p>
<p><br><br><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225090020365.jpg?TTKWyjGBkCfme8Yo"/></font></strong></p>
<p><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225083751685.jpg?TTKWyjGBGVLIqXY4"/></p>
<p><br><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225090013734.jpg?TTKWyjGBKAO9RICw"/></font></strong></p>
<p><br><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225090008118.jpg?TTKWyjGBGgu.MBQx"/></font></strong></p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225091159659.jpg?TTKWyjGB7_msb5BV"/></font></strong></p>
<p><strong><font color=#441415>(二崁香公所)</font></strong></p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225090006744.jpg?TTKWyjGBSK0CJXb3"/></font></strong></p>
<p><strong><font color=#441415>(二崁路邊擺飾---陶器古甕)</font></strong></p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225083800676.jpg?TTKWyjGBXLQ5yIW0"/></font></strong></p>
<p><strong><font color=#441415>(茅草屋)<br><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225083803339.jpg?TTKWyjGBwUZee3KK"/></font></strong></p>
<p><strong><font color=#441415></font></strong>&nbsp;</p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225083758365.jpg?TTKWyjGB8gWYX6bx"/></font></strong></p>
<p><strong><font color=#441415>澎湖的牛車是兩輪的，與臺灣的不同</font></strong></p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225083801645.jpg?TTKWyjGBgy5x6Lco"/></font></strong></p>
<p><strong><font color=#441415></font></strong>&nbsp;</p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225091202169.jpg?TTKWyjGBuXGUJVpl"/></font></strong></p>
<p><strong><font color=#441415></font></strong>&nbsp;</p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225091200472.jpg?TTKWyjGBHjy22dnE"/></font></strong></p>
<p><strong><font color=#441415></font></strong>&nbsp;</p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225091205646.jpg?TTKWyjGBdDRYG8mx"/></font></strong></p>
<p><strong><font color=#441415>(二崁民宿)</font></strong></p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225091204264.jpg?TTLWyjGB84DOkW8X"/></font></strong></p>
<p><strong><font color=#441415>(二崁民宿)</font></strong></p>
<p><strong><font color=#441415><img src="http://tw.f14.yahoofs.com/myper/avRU7l.QAwShChF1u0v86rcg/blog/ap_20070225090034858.jpg?TTLWyjGB.BYHZObo"/></font></strong></p>
<p><strong><font color=#441415>(二崁廟)<br><span style="FONT-SIZE:11pt;"><font color=#00007f></font></span></font></strong></p>
<p><strong><font color=#441415><span style="FONT-SIZE:11pt;"><font color=#00007f>PS:</font><a href="http://ai-house.myweb.hinet.net/"><font color=#00007f>愛鄉民宿</font></a><font color=#00007f>是shine家族的人在經營,地點在馬公市區很方便,房屋雖不豪華但寬敞舒服,而且還能仔細觀察到天后宮的屋脊呢! 女主人很親切,她賣的風茹茶及仙人掌汁特別可口喔!</font></span></font><span style="FONT-SIZE:11pt;"><font color=#00007f> </font></span></strong></p>
</div>]]></description>
            <pubDate>Sat, 07 Jul 2007 13:19:41 +0800</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/waian-950604/article?mid=1487]]></guid>
         </item>        </channel>
        </rss><!-- w4.blog.tpc.yahoo.com uncompressed/chunked Mon Nov  9 16:48:09 CST 2009 -->
