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

PHP 實作漢字轉拼音碼表生成與應用

     編輯:PHP 相關知識

PHP 實作漢字轉拼音碼表生成與應用

早期中文輸入法碼表 (如 Windows 內建拼音輸入法匯出的 winpy.txt) 可轉換為 PHP 陣列,實現簡易漢字轉拼音功能。本文示範碼表轉換、序列化快取、以及給文字標註拼音的應用範例。

1. 碼表來源與格式

winpy.txt 典型每行格式:

啊 a
阿 a
呵 a
...
漢 han
字 zi

每行前 2 個位元組為漢字 (Big5/GBK 雙位元組),後方為拼音 (ASCII)。

2. 碼表轉換與快取腳本

<?php
$cacheFile = 'pymb.txt'; // 序列化快取
$sourceFile = 'winpy.txt'; // 原始碼表

if (file_exists($cacheFile)) {
    $fp = fopen($cacheFile, 'r');
    $pymb = unserialize(fread($fp, filesize($cacheFile)));
    fclose($fp);
} else {
    $fp = fopen($sourceFile, 'r');
    $pymb = [];
    while (!feof($fp)) {
        $line = fgets($fp, 128);
        // 解析:前 2 bytes 漢字,其餘為拼音
        // 注意:此處假設單字編碼,實際需依編碼處理
        sscanf($line, "%2s%s", $ch, $py);
        if ($ch >= "啊" && ord($py) < 128) { // 簡易過濾
            $pymb[$ch] = $py;
        }
    }
    fclose($fp);

    // 寫入快取
    $fp = fopen($cacheFile, 'w');
    fwrite($fp, serialize($pymb) . " ");
    fclose($fp);
}

// 使用範例
echo $pymb['漢'] . ' ' . $pymb['字']; // 輸出: han zi
?>

3. 應用:給文字加拼音

<?php
function get_py($text) {
    global $pymb;
    $len = strlen($text);
    $result = [];
    for ($i = 0; $i < $len; $i += 2) { // 假設雙位元組編碼 (GBK/Big5)
        $ch = substr($text, $i, 2);
        if (isset($pymb[$ch])) {
            $result[] = $pymb[$ch];
        } else {
            $result[] = $ch; // 未找到保留原字
        }
    }
    return implode(' ', $result);
}

// 使用
$text = "漢字拼音";
echo get_py($text); // 輸出: han zi pin yin
?>

4. 現代化方案:Overtrue/Pinyin (Composer 套件)

手工維護碼表極其繁瑣且不支援多音字、分詞。現代專案請直接使用成熟套件:

composer require overtrue/pinyin

<?php
use Overtrue\Pinyin\Pinyin;

$pinyin = new Pinyin();

// 預設輸出: ['han', 'zi', 'pin', 'yin']
print_r($pinyin->convert('漢字拼音'));

// 保留聲調: ['hàn', 'zì', 'pīn', 'yīn']
print_r($pinyin->convert('漢字拼音', PINYIN_TONE));

// 只取首字母: ['h', 'z', 'p', 'y']
print_r($pinyin->convert('漢字拼音', PINYIN_FIRST_LETTER));

// 多音字處理: 返回陣列
print_r($pinyin->convert('重慶', PINYIN_ALL)); // [['zhòng','chóng'], ['qìng']]

5. 套件核心特性

  • 基於 pinyin-data 詞庫 (數萬常用字),支援多音字、分詞優化。
  • 支援多種輸出格式:聲調數字、聲調符號、首字母、ASCII、自訂分隔符。
  • 可自訂詞庫覆蓋預設 (專業術語、人名、地名)。
  • 效能優化:靜態快取、按需載入、無外部依賴。
  • 相容 PHP 7.2+、Laravel/Lumen 服務提供者整合。

結語

手工碼表轉換僅適合教學或極簡場景。實際專案請使用 overtrue/pinyin 等成熟套件,節省開發時間並獲得準確的多音字、分詞支援。

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