在 IE 瀏覽器傳遞 GET 參數中文遇到亂碼

昨天被丟了一個問題:同一隻 PHP 程式在 Chrome/Firefox 丟中文參數沒問題,怎麼在 IE (Microsoft Internet Explorer) 就會亂碼?

code 大概長這樣,主要是把傳入的參數存入 DB 裡面,資料庫用的是 UTF-8 的編碼

$con = mysql_connect('127.0.0.1','id','pw');
mysql_select_db('test', $con);
mysql_query('set names 'utf8'');
$msg = $_GET['msg'];
$sql = 'INSERT INTO `db` . `table` (`column`) VALUES (' . $msg . ')';
mysql_query($sql, $con);
mysql_close($con);

問題其實是出在 IE 傳遞參數時會以 ANSI 來編碼 (即便網頁編碼是UTF-8),自然會出現亂碼的問題,基於現在 UTF-8 是主流,所以可以在使用傳入的參數之前使用 PHP 內建的 mb_detect_encoding 做這樣的處理:

$encode = mb_detect_encoding($msg, array ('UTF-8', 'BIG5', 'GB2312'));
if ($encode && $encode != 'UTF-8') {
    $msg = iconv ($encode, 'UTF-8', $msg);
}

{ "UTF-8", "BIG5", "GB2312" } 這段可以依序換成要被識別的編碼,在編碼可以辨識(有被列入)且不是 UTF-8 的情況下會用 PHP 內建的 iconv 來做轉換的動作, 就可以解決這樣的問題啦~

瀏覽器綜合測試 on Windows

Opera 也開始改用 Webkit 了…有點可惜 這樣的 Opera 還是 Opera 嗎?

讓我們繼續看下去…

剛剛想說裝了 Opera Nex t(開始改用Webkit 的 Opera) 來測一下大家支援 HTML5 的狀況

平台是Windows 7 Home Premium 64-bit SP1 以下按照分數高低排序

硬體的話就不提了 反正只是比較性而已

網址:
http://html5test.com

Google Chrome 27.0.1453.94 m
463 AND 13 BONUS POINTS
Opera Next 15.0.1147.18
433 AND 9 BONUS POINTS
Mozilla Firefox 21.0
399 AND 14 BONUS POINTS
Microsoft Internet Explorer 10.0.9200.16576 更新版本10.0.5
320 AND  6 BONUS POINTS

以上是在Windows平台上的最新穩定版本測試結果

其他小品牌或開發版、測試版、已經停止開發的就不一一測試了

還是希望HTML5盡早制定完成 也希望各家實作盡量一致並完整支援

這樣在開發web前端的時候可以輕鬆一點

後來想說順便測一下效能好了…

Browsermark 2.0(綜合測試):
http://browsermark.rightware.com

Google Chrome 27.0.1453.94 m
6271
Opera Next 15.0.1147.18
5987
Mozilla Firefox 21.0 
4810
Microsoft Internet Explorer 10.0.9200.16576 更新版本10.0.5 
4237

smashcat(測canvas):
http://www.smashcat.org/av/canvas_test/

Microsoft Internet Explorer 10.0.9200.16576 更新版本10.0.5 
305
Mozilla Firefox 21.0 
250
Opera Next 15.0.1147.18
170
Google Chrome 27.0.1453.94 m
59

Peacekeeper(測HTML5):
http://peacekeeper.futuremark.com/

Microsoft Internet Explorer 10.0.9200.16576 更新版本10.0.5
3277
Mozilla Firefox 21.0
3024
Google Chrome 27.0.1453.94 m
2557
Opera Next 15.0.1147.18(應該是因為webkit的關係被誤認為是Chrome)
2221

Kraken JavaScript Benchmark v1.1(顧名思義是測javascript):
http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html

Opera Next 15.0.1147.181352.1ms
Google Chrome 27.0.1453.94 m1361.5ms
Mozilla Firefox 21.01647.9msMicrosoft Internet Explorer 10.0.9200.16576 更新版本10.0.54100.7ms

octane-benchmark (測javascript):
http://octane-benchmark.googlecode.com/svn/latest/index.html

Opera Next 15.0.1147.18
20493
Google Chrome 27.0.1453.94 m
17034
Mozilla Firefox 21.0
15104
Microsoft Internet Explorer 10.0.9200.16576 更新版本10.0.5
6587

sunspider(測javascript):
http://www.webkit.org/perf/sunspider-1.0/sunspider-1.0/driver.html

Opera Next 15.0.1147.18
143.3ms
Mozilla Firefox 21.0
148.0ms
Google Chrome 27.0.1453.94 m
1301.3ms
Microsoft Internet Explorer 10.0.9200.16576 更新版本10.0.5
顯示不出結果…

小發現是 不管在哪個測試 在複製貼上結果到編輯器的時候

Chrome和Opera會很完整的複製樣式 後兩名沒有 這大概是HTML5的關係~

另外這個微軟測試很明顯IE效能就比別人高超多…
http://ie.microsoft.com/testdrive/

我只選其中一項來測
http://ie.microsoft.com/testdrive/Performance/Minesweeper/

Microsoft Internet Explorer 10.0.9200.16576 更新版本10.0.5
1.0s
Mozilla Firefox 21.0
5.4s
Opera Next 15.0.1147.18
6.2s
Google Chrome 27.0.1453.94 m
6.3s

測試顯示圖形為預設的IE10,分數為花費秒數,越低越好,排名剛好倒過來

該不會是衝著Google或Webkit而來的吧XDDD

另外有一個WebVizBench(測HTML5)的網站:
http://webvizbench.com/

不過好像分數會受解析度影響…所以就中途作罷 懶得去細部調整讓個瀏覽器顯示範圍解析度完全一致…因為太麻煩了! 這點有點可惜

原則上上面的結果有加單位的數字越大是效能越差的意思,先後順序代表分數優劣

看起來是各有千秋…滿有趣的! 供各位參考~