看板 PHP 關於我們 聯絡資訊
有感而發,純屬嘮叨... 以下講三個我覺得最常看到的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
thitbbeb :推…大大可不可以再多講些必學會的東西?舉個實例像 07/30 10:35
thitbbeb :是新增資料一般大大你都如何寫呢? 07/30 10:35
thitbbeb :我雖然功能都寫得出來可是不知程式有沒有達到最佳化 07/30 10:36
thitbbeb :還有安全性的問題,有無BUG我都比較不了解… 07/30 10:36
buganini :推一下 另外windows上Apache 2某版本之後 07/30 15:31
buganini :只能收UTF8的URL(即使是urlencoded) 不然會forbidden 07/30 15:32
buganini :big5唯一的好處只有....算字寬比較準= = 07/30 15:35
kylekai :Big5算字寬比較準?...何解?...用 mb_strlen 不能嗎? 07/30 18:05
dannyst :很實用 , 推 07/31 15:08
kyork :big5的好處是spider可以認得,utf-8會影響搜尋排行 07/31 15:57
kyork :不過話說回來spider本來就不愛動態網頁了=.= 07/31 16:02
alpe :樓上的沒這回事吧. spider big5 utf-8 都吃吧 07/31 18:23
Kenqr :推~ 07/31 22:35
BloodyDawn :推一個 07/31 23:23
kyork :我是這邊看到的http://0rz.tw/1f4wA 08/01 01:21
kyork :用utf-8 spider無法判斷是哪一國語言 08/01 01:22
kyork :如果是錯誤資訊的話請指正 08/01 01:22
bcse :我覺得無法判斷的spider滿笨的… XD 看字區就知道啦 08/01 11:18
bcse :你那篇的資訊應該已經過時了,現在G、Y!都吃UTF-8 08/01 11:19
bcse :不過那篇文章舉的例子…我覺得已經不是編碼的問題 08/01 11:23
alpe :如果說沒辦法抓utf8的spider你要它也沒用. 08/01 11:25
Arton0306 :推! 08/01 13:33
ppoo75 :受教了!!我推!! 10/03 19:11