
因為本站使用的是繁體漢字,而我們大陸的大部分人都是使用的簡體漢字,所以我在頂端導航處加了“繁簡切換”功能。考慮到更好的用戶體驗,所以我決定在正文部分加上一些警示文字。但是呢,如果來訪的用戶如果是台灣或者香港地區的,那麼警示文字顯得有些多餘且沒必要,所以需要對其進行語言判斷。網上很多用到的方法大都是對來訪的ip進行判斷,但是如果用戶使用了代理或者在外等一些情況,那麼可能會顯得有些不准確。所以我考慮了下通過瀏覽器的語言設置進行判斷,雖然說不能排除某一小部分人可能喜歡用英文的語言設置,但是大部分還是奏效的。
實現的原理:
瀏覽器發給web服務器的 HTTP Headers Information 中包含了這樣一個信息 Accept-Language這個信息就是,瀏覽器中 工具->Internet選項->常規 下的 語言,它就是用來設置瀏覽器可接受的語言首選項的, 它可以是多種可接受語言的優先排序列。
以PHP為例,用戶可接受的語言信息,放在$_SERVER['HTTP_ACCEPT_LANGUAGE']裏,變量信息是類似這樣的 “zh-cn”,如果是多語言列,是類似 “zh-cn,en;q=0.8,ko;q=0.5,zh-tw;q=0.3″這樣的情況。
戳我進入判斷當前使用的瀏覽器的語言設置
因為本人對php幾乎一竅不通,當時就直接用if語句寫個個判斷,如下:
1 2 3 4 5 6 | <? if($_SERVER['HTTP_ACCEPT_LANGUAGE']=="zh-cn" ) { echo "经雷达探测,您使用的语言为新中国的简体汉字,为避免晕车,请使用顶端导航的繁简切换功能,謝謝 !";//当是簡體中文的时候 } ?> |
但是你的瀏覽器可能并不是只有一種語言設置,例如firefox默認的語言設置就是zh-cn,zh;q=0.5,opera國際版的是zh-CN,en;q=0.9,fr;q=0.8,ja;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-PT;q=0.2,nl;q=0.1,sv;q=0.1,nb;q=0.1,da;q=0.1,fi;q=0.1,ru;q=0.1,pl;q=0.1,zh-TW;q=0.1,ko;q=0.1,所以此法並不可取。google了近半個小時,查到了php的preg_match()函數,大體就是可以自定義一個規則來和某一個參數進行匹配,所以判斷的語句修改成如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php error_reporting(E_ALL ^ E_NOTICE); preg_match('/^([a-z\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);// 分析 HTTP_ACCEPT_LANGUAGE 的屬性 $lang = $matches[1];// 取第一語言設置 switch ($lang) { case 'zh-cn' : echo "经雷达探测,您使用的语言为新中国的简体汉字,为避免晕车,请使用顶端导航的繁简切换功能,谢谢 !"; break; default: echo "經雷達探測,您使用的語言目前超出本站的想像範圍,您確定您看得懂中文?"; break; } ?> |
部分瀏覽器的語言顯示大小寫可能有問題,比如我所使用的opera顯示的是zh-CN,所以我們要繼續完善它,成品如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?php error_reporting(E_ALL ^ E_NOTICE); preg_match('/^([a-z\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);// 分析 HTTP_ACCEPT_LANGUAGE 的屬性 $lang = $matches[1];// 這裏只取第一語言設置 (其他可根據需要增強功能,這裏只做簡單的方法演示) switch ($lang) { case 'zh-cn' : echo "经雷达探测,您使用的语言为新中国的简体汉字,为避免晕车,请使用顶端导航的繁简切换功能,谢谢 !"; break; case 'zh-CN' : echo "经雷达探测,您使用的语言为新中国的简体汉字,为避免晕车,请使用顶端导航的繁简切换功能,谢谢 !"; break; case 'zh-hk' : echo "經雷達探測,您使用的語言為中國傳統繁體漢字,為本站所推崇文字,祝您旅途愉快!"; break; case 'zh-HK' : echo "經雷達探測,您使用的語言為中國傳統繁體漢字,為本站所推崇文字,祝您旅途愉快!"; break; case 'zh-tw' : echo "經雷達探測,您使用的語言為中國傳統繁體漢字,為本站所推崇文字,祝您旅途愉快!"; break; case 'zh-TW' : echo "經雷達探測,您使用的語言為中國傳統繁體漢字,為本站所推崇文字,祝您旅途愉快!"; break; case 'en-us' : echo "經雷達探測,您使用的語言為英文,您確定你看得懂中文?"; break; default: echo "經雷達探測,您使用的語言目前超出本站的想像範圍,您確定您看得懂中文?"; break; } ?> |
具體的效果可見本blog的文章上端的提示文字,或者把代碼存成php放在自己網絡空間測試。如發現顯示不準確,請訪問http://guaniu.com/test/lang.php探測你的瀏覽器的語言設置,然後給我回覆,謝謝!

Pingback: 讓你的<pre></pre>能自動換行 | Leeiio™ Chaos Made.
Pingback: 讓你的能自動換行 - Leeiio Chaos Made.