首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 使用者語言偵測與設定類別:自動解析 Accept-Language、Cookie 持久化

     編輯:PHP 相關知識

前言

多語系網站需依使用者偏好顯示介面語言。標準做法:優先讀取使用者明確設定的語言,若無則解析瀏覽器 Accept-Language 標頭。本文提供 UserLang 類別,封裝此邏輯,支援 Cookie 持久化(可自訂名稱、過期時間),語言代碼對應:en(英文)、sc(簡體中文)、tc(繁體中文)。

類別功能

  • get():取得目前語言(Cookie > Accept-Language > 預設 en)
  • set($lang):寫入 Cookie,僅接受 en/sc/tc
  • 建構子可自訂 Cookie 名稱(預設 userlang)與過期秒數(預設 30 天)

核心類別程式碼

<?php
class UserLang {
    private $name = 'userlang'; private $expire = 2592000; // 30天

    public function __construct($name='', $expire=null) {
        if($name) $this->name = $name;
        if(is_numeric($expire) && $expire>0) $this->expire = intval($expire);
    }
    public function get() {
        if(isset($_COOKIE[$this->name])) return $_COOKIE[$this->name];
        return $this->getAcceptLanguage();
    }
    public function set($lang='') {
        $lang = strtolower($lang);
        if(in_array($lang, array('en','sc','tc'))) setcookie($this->name, $lang, time()+$this->expire);
    }
    private function getAcceptLanguage() {
        $lang = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']);
        if(in_array(substr($lang,0,5), array('zh-tw','zh_hk'))) return 'tc';
        if(in_array(substr($lang,0,5), array('zh-cn','zh-sg'))) return 'sc';
        return 'en';
    }
}
?>

使用範例

<?php
require "UserLang.class.php";
$obj = new UserLang('sitelang', 3600); // Cookie 名 sitelang,1小時過期
echo $obj->get().'<br>'; // 輸出 en / sc / tc

// 使用者切換語言時
if(isset($_GET['lang'])) $obj->set($_GET['lang']);

Accept-Language 解析細節

HTTP_ACCEPT_LANGUAGE 格式如 zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7。本類別簡化處理:取前 5 字元判斷 zh-tw/zh_hk(繁體)、zh-cn/zh-sg(簡體),其餘視為英文。實際專案建議使用 Locale::acceptFromHttp()(intl 擴展)或完整解析 q-value 排序。

常見問題

如何限制使用者只能從特定頁面進入?

檢查 $_SERVER['HTTP_REFERER'] 是否為允許的來源頁面,但 Referer 可偽造且 HTTPS→HTTP 會遺失,建議改用 Session/Token 驗證流程。

PHP 如何配合 HTML 表單實現登入?

HTML <form method="post" action="login.php"> 提交帳密,PHP login.php 驗證後 setcookie 或 $_SESSION 記錄登入狀態,導向會員頁。

結語

UserLang 類別提供輕量的語言偵測與持久化機制,適合中小型多語系專案。大型專案建議採用成熟的 i18n 函式庫(如 Symfony Translation、Laravel Localization)支援複數形式、語系檔案管理、路由前綴等完整功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved