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

PHP 正則判斷字串編碼與中文檢測

     編輯:PHP 相關知識

自動識別 UTF-8 / GBK 編碼下的中文字元正則寫法

處理多語言系統時,常需驗證輸入是否僅包含中文、英數、底線。由於 UTF-8 與 GBK 編碼的中文位元組範圍不同,正則模式必須對應編碼撰寫。

UTF-8 環境:使用 Unicode 屬性或碼點範圍

<?php
$str = '測試字串_123';

// 方法一:Unicode 碼點範圍(需 u 修飾符)
if (preg_match('/^[\x{4e00}-\x{9fa5}a-zA-Z0-9_]+$/u', $str)) {
    echo "UTF-8 格式合法";
}

// 方法二:Unicode 屬性 \p{Han} 代表漢字(PHP 5.1+)
if (preg_match('/^[\p{Han}a-zA-Z0-9_]+$/u', $str)) {
    echo "UTF-8 格式合法(更簡潔)";
}
?>

GBK/GB2312 環境:位元組範圍匹配

<?php
$str_gbk = iconv('UTF-8', 'GBK', '測試字串_123');

// GBK 中文範圍:A1-FE 兩位元組
if (preg_match('/^[\x81-\xFE\x40-\x7E\x80-\xFEa-zA-Z0-9_]+$/', $str_gbk)) {
    echo "GBK 格式合法";
}

// 簡化版(僅針對常用漢字區)
if (preg_match('/^[\xA1-\xFFa-zA-Z0-9_]+$/', $str_gbk)) {
    echo "GBK 簡易檢查通過";
}
?>

自動偵測編碼並驗證的完整範例

<?php
function validateInput(string $input): bool
{
    // 偵測編碼
    $encoding = mb_detect_encoding($input, ['UTF-8', 'GBK', 'GB2312'], true);
    
    if ($encoding === 'UTF-8') {
        return (bool)preg_match('/^[\p{Han}a-zA-Z0-9_]+$/u', $input);
    } elseif (in_array($encoding, ['GBK', 'GB2312'])) {
        return (bool)preg_match('/^[\xA1-\xFFa-zA-Z0-9_]+$/', $input);
    }
    return false; // 未知編碼拒絕
}

// 測試
$tests = ['測試_123', 'test_abc', '測試@#$'];
foreach ($tests as $t) {
    echo "$t => " . (validateInput($t) ? '合法' : '非法') . "\n";
}
?>

注意事項

  • PHP 內部建議統一使用 UTF-8,資料庫、HTML、PHP 檔案編碼皆設為 UTF-8,可避免編碼轉換麻煩。
  • mb_detect_encoding 偵測並非 100% 準確,短字串易誤判;生產環境應強制規範輸入編碼。
  • 現代專案推薦使用 filter_var 搭配 FILTER_VALIDATE_REGEXP 或表單驗證庫(如 Symfony Validator)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved