在PHP中最常見的應用就是互動表單,因此接收用戶端資訊是非常常見的事!然而俗話說:「世風日下,人心不古」,這年頭誰知道用戶端的人在想些什麼?用戶端送出的資訊很有可能會包含一些惡意的語法,對於24小時暴露在網路環境的網站來說,時時刻刻都得小心防範駭客的攻擊,提升自我的資訊安全觀念非常重要。所以在接收用戶端資訊後,存入資料庫之前,都會先對其進行基本的過濾;第一個要判斷的就是HTML語法的攻擊!

許多惡意語法都是建立在HTML上,PHP本身有提供轉換HTML碼的函數:htmlspecialchars()htmlentities();其中htmlspecialchars()只會轉換HTML相關碼:

  • '&' => '&'
  • '"' => '"'
  • ''' => ''' 
  • '<' => '&lt;'
  • '>' => '&gt;'

htmlentities()則是把字串中所有字元做轉換,另外還可以設定轉換字串的編碼方式。還有一個函數:strip_tags()是直接把HTML的標籤整個過濾掉。

之前在題目試作/哇寶基本能力測試一文中,也有提到相關的觀念。另外附上那個時候google到的一個國外防止XSS的網頁:PHP XSS (cross site scripting) filter function,他有對HTML作是否可能被當作惡意的語法作判斷,不過測試後發現對中文的處理好像有點問題...就當作是英文的過濾函式吧~

文章標籤

danielhuang030 發表在 痞客邦 留言(0) 人氣()

說來慚愧,之前完全沒有注意物件導向的定義與使用;但是因為現在工作所使用的撰寫方式為全物件導向,這意味著我要重頭學起~從《深入淺出JAVA 第二版》開始!

事實上維基百科對於物件導向程式設計的介紹也非常完整,但是頂多也就這麼一個頁面的介紹,要把物件導向的全貌解釋清楚,還略嫌不足;當初看完整篇介紹,其實對物件導向仍是一知半解的狀態...

之前Jace就在如何學習ZendFramework的介紹文中推薦過《深入淺出JAVA 第二版》這本書。我目前先挑選書中對物件導向介紹的章節研讀:2、拜訪物件村;4、物件的行為;7、物件村的優質生活(繼承與多型);8、深入多形;9、物件的前世今生。目前已經讀完類別、物件、封裝與繼承的觀念;現在可以說是稍微有一點點概念了~

類別(class)他就像是一個規則、一個模子,物件(Object)則是利用這個規則、模子做出來的東西。類別只是規範,如果要在程式中使用的話,就一定得先New一個物件出來!類別包含實體變數(instance variables或稱屬性)與方法(method),也被稱作是狀態與行為;實體變數被用來記載此類別已知的事物,而方法則是用來說明類別執行的動作。類別所描述的是物件「知道什麼」與「執行什麼」!

狀態影響行為,行為影響狀態。方法可以引用實體變數的值作判斷,實體變數可以用參數的方式影響方法;而方法則可以利用的set或是get的方式,對實體變數作存取的動作。封裝的意義在於避免洩漏資料,為了不讓實體變數就這樣直接暴露在隨時隨地可以任意設定的狀況下,在習慣上會將實體變數標示為private,另外利用標示為public的方法setter與getter,對實體變數進行存取,也可在此同時進行限制及過濾。

繼承也是物件導向的特色之一。子類別可以用繼承的方式沿用父類別的實體變數及方法;唯父類別實體變數與方法的標示需為public或protect。A extends B意味著B的種類中含有A,B擁有的所有特性A也會有,然而A擁有的特性B並不一定會有;如白馬是馬,白馬跟馬一樣有長長的臉而且跑的很快,但是並不代表所有的馬都是白色的。子類別繼承父類別所有的方法,但是也可以依照子類別自己的需求,建立新方法;或是完全改寫繼承自父類別的方法(override),但實體變數不行。

文章標籤

danielhuang030 發表在 痞客邦 留言(0) 人氣()

經由透視WebMVC的作者Jace親自講解,讓我稍微了解到什麼是MVC架構。透過一個簡單的留言版程式的範例解構,重新建立一個符合MVC架構的留言版程式。

依照過去一般留言版程式的撰寫模式,先將其分為二個部分:一個是業務邏輯、表現邏輯。業務邏輯(business)是指PHP控制與執行的部分;表現邏輯(present)則是指單純HTML或XML輸出呈現的部分。一但程式分為此二部分,表現邏輯就相當於View的部分;之後再將業務邏輯分成Model與Controller。

Model在留言版程式中所代表的角色,就有點像是「取得資料」這一部分;不論取得資料的方式是經由文字檔或是資料庫的連結讀出寫入,這一塊在MVC的架構中就相當於Model的部分。所以在範例的留言版程式中,Guestbook.php扮演的角色是用來與資料來源溝通的管道。

Controller在留言版程式中所代表的角色,就比較像是「操縱動作」這一部分;從留言版程式的功能面來說,分為選擇頁面(首頁/新增頁/RSS的XML頁面)、新增資料時取得的變數與重新導向。如果說Guestbook.php是與資料來源溝通的管道,Actions.php就像是觸發事件,以及運用Guestbook.php去產生動作的角色;當然最後所呈現的結果是View。所以Controller可以說是串聯Model與View的重要橋樑。

其後又提到一些物件導向的觀念,因為我這方面實在是很弱;所以整個聽下來有些吃力。在我粗淺的理解後導出的一個見解是:利用抽象化後繼承父類別的子類別,可以減少使用判斷式,以及更動到原有程式碼的機會。大概是這樣的意思吧?(抓頭)關於物件導向,Jace建議我看《深入淺出 Java 程式設計 第二版》這本書,我想我得好好花時間研究一下囉!

文章標籤

danielhuang030 發表在 痞客邦 留言(0) 人氣()

因為哇寶在Ajax的應用上是採用jQuery,所以利用時間稍為了解一下。

我以往在處理Ajax時大部分是借用網上的範例JS檔,所以它通常都有一套制式的規範,哪裡要new,哪裡要丟參數,範例上都寫得清清楚楚,只要按部就班,通常都能很快達到我想要的功能。另外一種是土法煉鋼,自己造輪子;先從JS丟參數到php,再由php切我要的參數去跟伺服端Query我要的資料,最後呈現。這二種方式其實好像都不是正統的方式說...在看完jQuery的介紹後更是讓我有這樣的感覺~

網路上其實有很多淺顯易懂的介紹,我是看:國二學生認真打雜jQuery 學習心得筆記一系列文章稍微接觸jQuery這個Framework的。詳盡且生動有趣的介紹,讓我對jQuery有粗淺的認識!有興趣可以去逛逛~^^

文章標籤

danielhuang030 發表在 痞客邦 留言(0) 人氣()

ZendFramework是PHP的一個開發用框架,主要以PHP5作為撰寫時的基礎。要使用之前當然得先建立環境,以下是安裝的順序:參考「在Zend Framework上開發一個HelloWorld

1、首先先從ZendFramework的官方網站下在最新版本的ZendFramework 1.5.1;解壓縮後放在任意資料夾。我是放在「C:\ZendFramework」這個目錄下。

2、修改Apache httpd.conf設定:
(1)啟動 Apache的 .htaccess功能,搜尋「AllowOverride」 並將其設定為 All
(2)
開啟 LoadModule rewrite_module modules/mod_rewrite.so。

3、
修改PHP php.ini設定:
(1)設定include_path = ".;C:\ZendFramework"
(2)開啟extension=php_pdo.dll、extension=php_pdo_mysql.dll

重新啟動
Apache,如此一來基本的環境算是建置完成了。

文章標籤

danielhuang030 發表在 痞客邦 留言(0) 人氣()

Windows環境下伺服器的安裝:apache_2.2.8-win32-x86-no_ssl.msiphp-5.2.5-Win32.zipmysql-essential-5.0.51a-win32.msiphpMyAdmin-2.11.5-all-languages-utf-8-only.zip

事實上在Windows環境下,我一直是用AppServ;簡單、快速、方便。但事實上各軟體之間的結合,是需要一些設定的。AppServ雖然提供一個很快就能上手的管道,然而他卻不是一個純粹乾淨的環境。那種感覺有點像是重灌時是用Ghost而不是一步步重新建立。

第一次一個一個軟體裝,完全架站手冊幫了我許多;或許裡面的版本有點舊了,不過基本的大方向是相同的。

1、首先先來看Apache的安裝與設定吧:

執行apache_2.2.8-win32-x86-no_ssl.msi->Next->Next->Next->localhost/localhost/E-mail->Custom Next->Next->Install->Finish

猴子也能學會的「軟體安裝Next」!安裝完成以後右下角的工具列會常佇一個Apache Monitor,表示安裝成功啦,可以從這裡控制Apache的服務。重點是設定啊,httpd.conf設定:

DirectoryIndex index.html index.htm index.php  //索引頁的設定

LoadModule php5_module "C:/PHP/php5apache2_2.dll"  //設定PHP5與Apache2.2的連接檔

<IfModule mod_php5.c>
  AddType application/x-httpd-php .php
  AddType application/x-httpd-php .php3
  AddType application/x-httpd-php-source .phps
</IfModule>  //設定Apache使用正確的方式處理 php 副檔名的檔案

2、PHP5的安裝與設定:

解壓縮php-5.2.5-Win32.zip->"C:\PHP\"->複製 php.ini-recommended 到 C:\WINDOWS 資料夾下並改名為 php.ini->複製 C:\PHP\libeay32.dll、C:\PHP\ssleay32.dll及C:\PHP\libmcrypt.dll至 C:\WINDOWS\System32 資料夾

這個有點複雜,因為要複製很多檔案到Windows的系統所在資料夾。php.ini設定:

extension_dir = "C:/PHP/ext"  //設定PHP延伸函式庫存放路徑

extension=php_curl.dll  //不知道
extension=php_gd2.dll  //圖片處理函式庫
extension=php_mbstring.dll  //字串編碼處理函式庫
extension=php_mcrypt.dll  //不清楚
extension=php_mysql.dll  //MySQL資料庫連接函式庫

3、MySQL5的安裝與設定:

執行mysql-essential-5.0.51a-win32.msi->Next->Complete Next->Install->Next->Finish->Configuration Wizard->Next->root 密碼->Execute->Finish

最後手動複製C:\Program Files\MySQL\MySQL Server 5.0\bin\libmySQL.dll 至 C:\WINDOWS\System32 資料夾。重新啟動Apache,建立一個phpinfo.php看看PHP5是否已在Apache環境中,MySQL是否運作正常。一切OK以後,再加上phpMyAdmin就完美啦!

4、phpMyAdmin的安裝與設定:

解壓縮phpMyAdmin-2.11.5-all-languages-utf-8-only.zip->"..\htdocs\phpmyadmin\"->複製 config.sample.inc.php 並改名為 config.inc.php

$cfg['blowfish_secret'] = '0123456789';  //設定cookie登入時的編碼參數

經由之前MySQL設定的root密碼,即可利用phpMyAdmin管理MySQl資料庫囉!

文章標籤

danielhuang030 發表在 痞客邦 留言(1) 人氣()

這是哇寶國際資訊的一份基本能力測試;很多東西雖然不能說完全沒有概念,不過要詳細回答不免還是要google一下,由此可知我的能力還遠遠不足。當作是自我測試與吸取新知吧,開始解題囉...

(X)HTML篇:

1、請寫出有序清單和無序清單的的 HTML Tag 並簡述其差異。

<ol>為有序清單標記;<ul>為無序清單標記。<li>則用來標示項目。<ol>可以追加type/start參數,分別代表排序類型/開始數字;<ul>則是可以追加type,決定標示項目呈現的方式。<li>可以追加type/value參數,決定標式呈現方式/呈現數字。

以下是呈現結果與HTML語法:

==========<呈現結果>==========

  1. 有序第一項
  2. 有序第二項
  3. 有序第三項
  • 無序第一項
  • 無序第二項
  • 無序第三項

==========<HTML語法>==========

<ol type="1">
    <li>有序第一項
    <li value="5">有序第二項
    <li>有序第三項
</ol>
<ul type="square">
    <li>無序第一項
    <li type="circle">無序第二項
    <li type="disc">無序第三項
</ul>

2、請簡述 HTML 空標籤的特性,並試著列出所有的空標籤。

HTML是一種標式語法,通常是成對出現,如:<b>這是粗體字</b>,有起始標籤<b>與結束標籤</b>。空標籤則是指不需要結束標籤的特別標籤。如:<br>斷行與<hr>格線。

3、請簡述 DOCTYPE 對瀏覽器的影響,並說明目前常用的 DOCTYPE 有哪些。

參考網頁:DOCTYPE使用方法。簡單說就是告訴瀏覽器該以怎樣的模式來解讀HTML;文末作者建議採用 XHTML (Transitional)的方式。老實說我以前不是很在意他...看來以後要多注意一點,符合標準。

4、如何在瀏覽器中顯示小於 (<) 或大於 (>) ?如果連結網址中有 & 符號時,應該在 HTML 原始碼中用什麼代替?

「>」:&lt;
「<」:&gt;
「&」:&amp;

5、請找出以下範例中不符合 XHTML 規範的地方:

<!DOCTYPE html PUBLIC "-/W3C//DTD XHTML 1.0 Transtitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
<title>測試範例</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="check.js"></script>
</head>
<body>
<form action="">
<table border="1">
<tr>
<td>
<label for="account">帳號</label>
</td>
<td>
<input type="text" name="account" id="account" />
</td>
</tr>
<tr>
<td>
<label for="passwd">密碼</label>
</td>
<td>
<input type="password" name="passwd" id="passwd" />
</td>
</tr>
<tr>
<td>
<label><input type="checkbox" name="keepLogin" value="1" />保持登入</label>
</td>
<td>
<input type="submit" value="登入" onclick="checkForm();" />
</td>
</tr>
</table>
</form>
</body>
</html>

其實我有作弊...(自首)只能說有W3C真好。

6、同上題,如果在 IE 上瀏覽該頁面時發生亂碼,你會如何解決?假設伺服端送出的標頭及頁面編碼都是正確的。

如果伺服端送出的標頭與頁面編碼都是正確的,那就有可能是HTML撰寫時的原始碼沒有存成對應的編碼。例如現在網頁編輯幾乎都使用UTF8編碼,但如果在HTML撰寫時仍使用ANCI碼儲存,就會發生亂碼。所以在撰寫HTML時,最好是將文件存成與伺服端標頭相同的編碼型態。

7、何謂 HTML 的語意?如果要在頁面上用一個標籤來表示文章標題,你認為用 <h1></h1> 比較好還是 <p class="articleTitle"></p> 比較好?

HTML:HyperText Markup Language,超文件標示語言。有許多前輩們似乎都比較喜歡用CSS,畢竟比起HTML,CSS的規範比較嚴謹,可以表現的變化也比較多;最重要的是它能夠獨立於HTML。網頁設計起來也就能程式歸程式,設計歸設計囉。

JavaScript篇:

1、請找出這段 JavaScript 的錯誤,並寫出正確可執行的版本。

function checkForm() {
    if (document.forms[0].account.value == '') {
        alert('請輸入帳號');
        return false;
    }
    if (document.forms[0].passwd.value == '') {
        alert('請輸入密碼');
        return false;
    }
    return true;
}

不知道為什麼,this.form抓不到表單內容,所以改用document.forms[0]來處理;另外if條件判斷是採用比較的方式,所以「=」要改為「==」。

2、請找出 HTML 範例中的 JavaScript 邏輯錯誤。

HTML範例中,JS的表單判斷是寫在「登入」按鈕上,如此一來即使JS判斷為false,表單資料卻還是傳送出去了。所以應該刪除onclick="checkForm();",改寫HTML的<form>,利用onSubmit去判斷JS的表單驗證。:

<form action="" onsubmit="return checkForm();">

3、請試著改寫 check.js ,在帳號或密碼未填寫任何資料並出現警告時,同時將輸入焦點置於錯誤的欄位上。

function checkForm() {
    if (document.forms[0].account.value == '') {
        alert('請輸入帳號');
        document.forms[0].account.focus();      
        return false;
    }
    if (document.forms[0].passwd.value == '') {
        alert('請輸入密碼');
        document.forms[0].passwd.focus();   
        return false;
    }
    return true;
}

4、上面的例子中利用 JavaScript 驗證後的資料,是否還需要用 PHP 或其他伺服端技術驗證?為什麼?

最安全的方法,當然是客戶端與伺服端都作驗證。曾經在網路上看過一句話:「永遠不要相信使用者輸入的資料!」單作JS的表單驗證其實是不夠的,拿表單傳值的GET來說,直接載網址列輸入資料就可以避開JS的驗證了。JS的驗證是為了減輕伺服的負擔,同時減少錯誤反應的時間。如果每筆資料的輸入都單靠伺服端的驗證,伺服器的負擔與使用者等待的時間就會成為問題。

5、請試著不要使用 onxxxx 事件,改用 window.onload 來繫結表單驗證的功能。

能力不足。

6、請說明 window.onload 可能潛藏的問題,並說明有什麼可以解決的方式 (不可使用第三方套件)。

能力不足。

PHP篇:

1、請說明 PHP 字串採用單引號和雙引號的差別。

單引號內如果有變數$var,不會被解讀;雙引號內如果有變數$var,則可以被解讀。

<?php
    $var = 'World!';
    echo 'Hello'.$var;  //印出「HelloWorld!」
    echo "Hello $var";  //印出「Hello World!」
    echo 'Hello $var';  //印出「'Hello $var」
?>

2、請說明如何接收網址參數。例如 http://localhost/index.php?abc=123 中的 abc 。

此網址使用GET傳遞參數,所以使用$_GET['abc']就可以接收。

3、請說明如何接收上面 HTML 範例的表單內容。

一般<form>如果沒有指定傳遞參數的方式,預設為GET;所以帳號與密碼分別是以$_GET['account']與$_GET['passwd']接收。

4、請說明 magic_quotes_gpc 對 PHP 程式的影響。

這個設定主要是解決SQL injection的問題。當magic_quotes_gpc=On時,使用者輸入的資料中若包含敏感的字元,如「'」時,它會自動將提交的表單內容加上「\」。這是一種防範使用者輸入惡意代碼設定,如果完全不處理使用這輸入的資料,使用者就有可能利用SQL語法看到本來它不應該看到的資料,甚至刪除table內的資料。如果magic_quotes_gpc=Off,我自己在處理SQL injection問題時是使用mysql_real_escape_string()函數,去防範敏感的字元。

5、如何避免使用者直接輸入 HTML 或是 JavaScript ?假設客戶要求一定要讓使用者輸入 HTML ,你該如何處理?

PHP有htmlspecialchars()htmlentities()函數,能將「&」、「"」、「<」、「>」轉成HTML字串格式。如:

& =  &amp;
" = &quot;
< = &lt;
> = &gt;

經過函數的轉換,當使用者的輸入中有<IFRAME>、<SCRIPT>這些HTML標籤時,就能避免被瀏覽器當成網頁內容而執行。
然而如果客戶要求,當然就必須另寫函數去處理,擋掉可能會被用來當作惡意攻擊的HTML標籤;google剛好找到一篇國外的文章:PHP XSS (cross site scripting) filter function。非常實用,利用此函數就能防止XSS的發生。

6、請說明 Session 的基本運作方式以及相關注意事項,並利用 PHP 的 Session 功能來完成上面的登入功能。帳號及密碼列表如下:

帳號 密碼
abc 123!@#
def 456L:'

能力不足。

7、請說明 Cookie 的基本運作方式以及相關注意事項,並利用 PHP 的 Cookie 功能來完成上面的保持登入功能。

能力不足。

8、請簡單設計一個 PHP 類別,讓以下程式能夠運作: (提示:要使用 SPL)

能力不足。

9、請修改你剛剛所建立的類別,讓 addValue 函式在參數不為數字時,能丟出一個異常。然後在上面程式中加入 try...catch 敘述,使得 Test 物件在加入非數字資料時,還能繼續運作並顯示錯誤。

能力不足。

10、為剛剛的類別加入註解 ,以便能夠以 PHPDoc 來產生 API 文件。

能力不足。

MySQL篇:

1、何謂 Schema ?

應該就是指資料庫的意思...

2、請建立一個名為 guestbook 的資料庫,並建立一個名為 messages 的資料表。其中 messages 資料表要包含自動編號 (id) 、標題 (title) 、內容 (content) 、作者 (author) 及建立日期 (createDateTime) 等欄位,欄位型態請以符合效率及易維護性為考量來設計。

建立資料庫:
CREATE DATABASE guestbook;

建立資料表:
CREATE TABLE messages (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
tite VARCHAR( 50 ) NULL ,
content TEXT NULL ,
author VARCHAR( 30 ) NULL ,
createDateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE = MYISAM ;

3、請試著用 MySQL 的命令列模式,來操作對 messages 資料表的新增、列表、修改及刪除等功能。

登入MySQL:
mysql -u*** -p***

使用資料庫:
use guestbook;

新增:
INSERT INTO messages (tite, content, author)
VALUES ('test', 'test_content', 'test_author');

列表:
select * from messages;

修改:
UPDATE messages SET tite = 'update', content = 'update_content', author = 'update_author'
WHERE id = 1 ;

刪除:
DELETE FROM messages WHERE id = 1;

4、請試著用 MySQL 的命令列模式匯出 guestbook 資料庫的結構與資料,並刪除 guestbook 資料庫。然後再利用匯出的備份檔案,來重建 guestbook 資料庫。

匯出資料:(剛好前一陣子有試著利用排程,定期備份資料庫
C:\>mysqldump --opt -u*** -p*** guestbook >C:\%date:~0,4%-%date:~5,2%-%date:~8,2%.sql

如此一來就會存成一個yyyy-mm-dd.sql的文字檔

刪除資料庫:
DROP DATABASE guestbook;

重建資料庫:
C:\>mysqladmin -u*** -p*** create guestbook
C:\>mysql -u*** -p*** guestbook < yyyy-mm-dd.sql

5、在 MySQL 4.1 以後,如果已存的資料其編碼為 UTF-8 ,那麼 Client 端在取出資料前,要先下何種指令來指定正確的編碼?

如果網頁是以UTF8的方式儲存,在進入資料庫以後要下:mysql_query("SET NAMES UTF8");

如果網頁是以big5的方式儲存,在進入資料庫以後要下:mysql_query("SET NAMES big5");

文章標籤

danielhuang030 發表在 痞客邦 留言(0) 人氣()

這是移除時的流程筆記,想當初我第一次移除SQL SERVER 2005的時候,花了我一整天的時間哩~本來還差點移不掉的說,一直狂google文章才好不容易移除乾淨。一開始移除時候,以為非常簡單的從「控制台」->「新增移除程式」裡直接勾選就OK了~沒想到因為當初安裝的時候還有一堆雜七雜八的附屬程式,如果只移除本體其他附屬程式就會出大問題...搞得我內心有陰影,一直不敢移除SQL SERVER 2005...

這次要移除前學聰明了,先去google了一下移除方法,微軟官方網站正好有手動移除;就參考他的步驟,一步一步走走看囉。

1、備份資料:移除前當然要先把之前所記錄的資料備份一下囉。

2、停止所有的SQL SERVER服務:為了避免在移除過程中,SQL SERVER仍在執行導致無法正確移除;所以要先關閉它的所有服務。從「我的電腦」->「滑鼠右鍵」->「管理」->「服務」把所有SQL SERVER的服務停止,這樣就OK啦。

3、在命令提示字元下,輸入" cd\Program Files\Microsoft SQL Server\90\Setup Bootstrap\ARPWrapper.exe /Remove"。

4、選擇移除所有SQL SERVER 2005相關檔案。

5、一段不算短的移除時間。移除完以後就OK啦!最後再將「控制台」->「新增移除程式」->「Microsoft SQL Server Native Client 元件」解除安裝;所有的SQL SERVER 2005就算移除完畢囉!

沒想到這麼容易,當初真的應該要先google一下的~^^|||

文章標籤

danielhuang030 發表在 痞客邦 留言(0) 人氣()

AIR

:Adobe Integrated Runtime,Adobe整合執行環境。簡單的說,Adobe Air把網路和桌面結合在一起,讓使用者可以從桌面端直接操控網路服務,而不需使用瀏覽器。

RIA:Rich Internet Application,豐富網際網路應用程式。網頁(應用程式)不但要能夠靈活簡單地與使用者回應互動,還必須符合人類直覺與經驗,並融合了網際網路應用程式易開發與低成本的特性。RIA企圖以可向量化動態圖像的前端工具,結合後台各式應用程式來打造跨平台的網路應用服務。

RESTRepresentational State Transfer,表象化狀態轉變。REST主要概念是「資源」。規定要將應用程式的狀態和功能,區分成各自獨立的資源,具有唯一的連結網址。

參考文獻:Adobe AIR 1.0 在桌面與網路互動-應用工具玩樂心得集錦網頁新視覺享受-RIAREST and RESTfull web service

文章標籤

danielhuang030 發表在 痞客邦 留言(0) 人氣()

一般正常在處理Big5<->UTF-8編碼上的轉換,第一個想到的就是iconv()函數;雖然需要額外安裝iconv函式庫,不過因為大部分人都有這種需求,虛擬主機商一般都會安裝,如果是自己的主機就更沒有這種問題了~

在Big5轉換成UTF-8方面,完全沒有問題;不過在UTF-8轉換成Big5方面,可就出現問題啦!因為UTF-8編碼對應的字遠比Big5編碼多,所以在一些特殊中文字的轉換上,如:堃、犇等字,iconv()函數就會出現錯誤啦!本來一直都沒有發現到這方面的問題,不過最近在公司專案管理系統上的Excel表轉出時,遇到有對方公司有「犇」這個字,讓iconv()函數發生錯誤而導致轉出的Excel檔案整個損壞的情況發生...Excel在正常輸入時是對應UTF-8編碼的,不過在轉出檔案時必須改為Big5編碼,不然UTF-8編碼的中文字會變成亂碼~無法自動判斷真是傷腦筋耶!

後來上網找了很久,都沒有令人滿意的答案;大家在轉出Excel檔時,幾乎都還是利用iconv()函數先轉成Big5編碼再轉出。後來我發現到另外一個函數:mb_convert_encoding(),似乎也是在處理編碼轉換的函數。試用之後雖然不存在的字還是不會自己生出來(如:堃、犇這些Big5編碼本來就沒有的字),但是轉不出來的字它會以「?」顯示,不會發生錯誤訊息,自然也就能正確的開啟轉出的Excel檔囉!雖然這並不是治本的方法,不過算是有稍微解決一些問題啦!

編碼真的是我目前最深的痛,轉來轉去真的很麻煩;目前我寫的PHP已經一律採用UTF-8編碼了~在網頁上是沒什麼問題,不過需要配合其他程式(如:Excel)時就必須轉來轉去...還蠻麻煩的哩!希望以後開發的軟體都能支援Unicode,畢竟萬國碼才是未來的趨勢吧!

文章標籤

danielhuang030 發表在 痞客邦 留言(6) 人氣()

Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼