[建議] 給初學者的幾個PHP開發建議

看板PHP作者 (小犬)時間16年前 (2008/07/30 03:43), 編輯推噓14(1409)
留言23則, 11人參與, 最新討論串1/6 (看更多)
有感而發,純屬嘮叨... 以下講三個我覺得最常看到的PHP壞習慣和我的想法 如果有更好的建議歡迎提出! 1. 請使用全Unicode/utf-8的編碼環境 為什麼不要用big5?原因很簡單 一是因為現在big5陷入亂世之中(事實上在補big5的Unicode補完計畫便是一個範例) 二是big5的許功蓋問題是個多年來難解的衝碼問題 因此,建議您使用全Unicode的編碼環境 Unicode包含各國語言的文字編碼,又不會有衝碼問題! 在網頁、php上編碼全用utf-8,MySQL資料庫方面校訂請設「utf8_general_ci」 作utf-8網頁不建議用記事本,記事本的utf-8會自動加BOM,引發一些問題 精華區中有編輯器推薦文,選一個來用吧 而一個常被遺忘的部份就是MySQL中Connection Character Sets的設定 (http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html) 最常的作法是在連上資料庫後送query: mysql_query('SET NAMES utf8;'); 這些都完成後,你就擁有了一個全utf-8的環境囉! 2. 請務必愛用$_GET、$_POST 我相信不只一本講PHP的書會給這樣的程式碼: <?php echo "$doggy"; ?> 然後跟你講執行xxx.php?doggy=3 之後會跑出3。 這是一個PHP的安全性遺毒,也就是所謂的register_globals 這個功能為何而危險呢?他把GET、POST或是Cookie裡面的東西全部倒成全域變數 進而增加覆蓋變數的可怕危險性!(範例:http://tw.php.net/register_globals) 所以,也請拜託千萬千萬記得把register_globals設為off 這個功能也會在PHP6拿掉 也建議請不要作extract($_POST)這種事情,結果半斤八兩 處理GET或POST或Cookie用$_GET、$_POST系列才是王道! 3. 請不要依賴Magic Quotes,用心對抗SQL injection magic_quotes_gpc很好很強大,他會把GET、POST和Cookie的引號都加上「\」 讓你可以把東西直接倒進SQL Query而避免SQL injection ...但這只是表面上很方便 囧 當你需要用到$_GET或$_POST的時候 動不動你就得要get_magic_quotes_gpc()來看有沒有被加上「\」... 真正預防SQL injection的方法是審慎處理每一個Query 該用int進來的東西就用sprintf或settype等來轉 對於字串可以用addslashes或著不方便一點的mysql_real_escape_string 把產生INSERT或UPDATE查詢的部份寫成一個函式是我很喜歡,安全又方便的作法 一是這個函式可以內建對String的Escape(加上「\」),二是可以直接丟Array 這種東西很多人寫過,應該不難找 see also: http://en.wikibooks.org/wiki/Programming:PHP:SQL_Injection http://tw.php.net/manual/en/security.database.sql-injection.php -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.199.119

07/30 10:35, , 1F
推…大大可不可以再多講些必學會的東西?舉個實例像
07/30 10:35, 1F

07/30 10:35, , 2F
是新增資料一般大大你都如何寫呢?
07/30 10:35, 2F

07/30 10:36, , 3F
我雖然功能都寫得出來可是不知程式有沒有達到最佳化
07/30 10:36, 3F

07/30 10:36, , 4F
還有安全性的問題,有無BUG我都比較不了解…
07/30 10:36, 4F

07/30 15:31, , 5F
推一下 另外windows上Apache 2某版本之後
07/30 15:31, 5F

07/30 15:32, , 6F
只能收UTF8的URL(即使是urlencoded) 不然會forbidden
07/30 15:32, 6F

07/30 15:35, , 7F
big5唯一的好處只有....算字寬比較準= =
07/30 15:35, 7F

07/30 18:05, , 8F
Big5算字寬比較準?...何解?...用 mb_strlen 不能嗎?
07/30 18:05, 8F

07/31 15:08, , 9F
很實用 , 推
07/31 15:08, 9F

07/31 15:57, , 10F
big5的好處是spider可以認得,utf-8會影響搜尋排行
07/31 15:57, 10F

07/31 16:02, , 11F
不過話說回來spider本來就不愛動態網頁了=.=
07/31 16:02, 11F

07/31 18:23, , 12F
樓上的沒這回事吧. spider big5 utf-8 都吃吧
07/31 18:23, 12F

07/31 22:35, , 13F
推~
07/31 22:35, 13F

07/31 23:23, , 14F
推一個
07/31 23:23, 14F

08/01 01:21, , 15F
我是這邊看到的http://0rz.tw/1f4wA
08/01 01:21, 15F

08/01 01:22, , 16F
用utf-8 spider無法判斷是哪一國語言
08/01 01:22, 16F

08/01 01:22, , 17F
如果是錯誤資訊的話請指正
08/01 01:22, 17F

08/01 11:18, , 18F
我覺得無法判斷的spider滿笨的… XD 看字區就知道啦
08/01 11:18, 18F

08/01 11:19, , 19F
你那篇的資訊應該已經過時了,現在G、Y!都吃UTF-8
08/01 11:19, 19F

08/01 11:23, , 20F
不過那篇文章舉的例子…我覺得已經不是編碼的問題
08/01 11:23, 20F

08/01 11:25, , 21F
如果說沒辦法抓utf8的spider你要它也沒用.
08/01 11:25, 21F

08/01 13:33, , 22F
推!
08/01 13:33, 22F

10/03 19:11, , 23F
受教了!!我推!!
10/03 19:11, 23F
文章代碼(AID): #18ZtBy9T (PHP)
討論串 (同標題文章)
文章代碼(AID): #18ZtBy9T (PHP)