分享乙個漢字轉拼音的擴充套件包

2021-09-03 01:53:58 字數 4509 閱讀 5051

最近搗鼓了通過調高德地圖行政區劃api來獲取城市資訊的小demo,但做的專案有乙個功能要求通過城市首字母區分城市的功能

類似於這樣:

首先我想的是通過php來解決

實現原理是獲取漢字的ascii碼通過對比判斷然後返回漢字的首字母

獲取首字母**如下:

function getfirstcharter($str)

);if ($fchar >= ord("a") and $fchar <= ord("z")) return strtoupper($str );

$a = $str;

$val = ord($a ) * 256 + ord($a ) - 65536;

if ($val >= -20319 and $val <= -20284) return "a";

if ($val >= -20283 and $val <= -19776) return "b";

if ($val >= -19775 and $val <= -19219) return "c";

if ($val >= -19218 and $val <= -18711) return "d";

if ($val >= -18710 and $val <= -18527) return "e";

if ($val >= -18526 and $val <= -18240) return "f";

if ($val >= -18239 and $val <= -17923) return "g";

if ($val >= -17922 and $val <= -17418) return "h";

if ($val >= -17417 and $val <= -16475) return "j";

if ($val >= -16474 and $val <= -16213) return "k";

if ($val >= -16212 and $val <= -15641) return "l";

if ($val >= -15640 and $val <= -15166) return "m";

if ($val >= -15165 and $val <= -14923) return "n";

if ($val >= -14922 and $val <= -14915) return "o";

if ($val >= -14914 and $val <= -14631) return "p";

if ($val >= -14630 and $val <= -14150) return "q";

if ($val >= -14149 and $val <= -14091) return "r";

if ($val >= -14090 and $val <= -13319) return "s";

if ($val >= -13318 and $val <= -12839) return "t";

if ($val >= -12838 and $val <= -12557) return "w";

if ($val >= -12556 and $val <= -11848) return "x";

if ($val >= -11847 and $val <= -11056) return "y";

if ($val >= -11055 and $val <= -10247) return "z";

} else

}

最後檢查資料結果有很多的資料首字母獲取為空:

例如(展示部分)發現這種方法並不是很好 很多生僻一點的字的首字母並沒有獲取到

so,只好放棄另謀他路

安裝

使用 composer 安裝:

composer require "overtrue/pinyin:~4.0"
使用可用選項:pinyin_tone unicode 式音調:měi hǎo

pinyin_ascii_tone 帶數字式音調:mei3 hao3

pinyin_no_tone 無音調:mei hao

pinyin_keep_number 保留數字

pinyin_keep_english 保留英文

pinyin_keep_punctuation 保留標點

pinyin_umlaut_v 使用v代替yu, 例如:呂lyu將會轉為lv

示例:

use overtrue\pinyin\pinyin;

// 小記憶體型

$pinyin = new pinyin(); // 預設

// 記憶體型

// $pinyin = new pinyin('overtrue\pinyin\memoryfiledictloader');

// i/o型

// $pinyin = new pinyin('overtrue\pinyin\generatorfiledictloader');

//返回拼音陣列形式

$pinyin->convert('帶著希望去旅行,比到達終點更美好');

// ["dai", "zhe", "xi", "wang", "qu", "lyu", "xing", "bi", "dao", "da", "zhong", "dian", "geng", "mei", "hao"]

//返回拼音調式拼音陣列

$pinyin->convert('帶著希望去旅行,比到達終點更美好', pinyin_tone);

// ["dài","zhe","xī","wàng","qù","lǚ","xíng","bǐ","dào","dá","zhōng","diǎn","gèng","měi","hǎo"]

//返回帶數字音調陣列

$pinyin->convert('帶著希望去旅行,比到達終點更美好', pinyin_ascii_tone);

//["dai4","zhe","xi1","wang4","qu4","lyu3","xing2","bi3","dao4","da2","zhong1","dian3","geng4","mei3","hao3"]

//生成用於鏈結的拼音字串

$pinyin->permalink('帶著希望去旅行'); // dai-zhe-xi-wang-qu-lyu-xing

$pinyin->permalink('帶著希望去旅行', '.'); // dai.zhe.xi.wang.qu.lyu.xing

//返回首字元字串

$pinyin->abbr('帶著希望去旅行'); // dzxwqlx

$pinyin->abbr('帶著希望去旅行', '-'); // d-z-x-w-q-l-x

$pinyin->abbr('你好2018!', pinyin_keep_number); // nh2018

//翻譯整段文字為拼音

$pinyin->sentence('帶著希望去旅行,比到達終點更美好!');

// dai zhe xi wang qu lyu xing, bi dao da zhong dian geng mei hao!

$pinyin->sentence('帶著希望去旅行,比到達終點更美好!', pinyin_tone);

// dài zhe xī wàng qù lǚ xíng, bǐ dào dá zhōng diǎn gèng měi hǎo!

//翻譯姓名

$pinyin->name('單某某'); // ['shan', 'mou', 'mou']

$pinyin->name('單某某', pinyin_tone); // ["shàn","mǒu","mǒu"]

實戰:生僻字獲取

猋(biao)麤(cu)掱(pa)贔(bi)焺(sheng)翾(xuan)

$pinyin = new pinyin();

//輸出帶連線符的拼音字串

echo $pinyin->permalink('猋麤掱贔焺翾');

echo "

"; //輸出首字母字串

echo $pinyin->abbr('猋麤掱贔焺翾');

非特殊說明,本博所有文章均為博主原創。

c 乙個有用的漢字轉拼音類

定義拼音區編碼陣列 private static int pyvalue newint 定義陣列 private static string pyname new string 漢字轉換 public static string convert string hzstring 把漢字轉換成拼音 全拼...

放乙個漢字拼音庫

現需要乙個漢字轉為拼音的程式,於是根據微軟拼音法的庫改動一下,以應付簡單需求。有兩萬多漢字,包括簡繁體。繁體的錯誤會多一些,簡體基本無錯。多音字的處理,只取乙個。改後的已經不是拼音,而是26個小寫拉丁字母 已用正則掃瞄過 對於 於 或 律 這樣的字,處理的不統一,有的是v,有的是u。看著辦吧。總的來...

漢字轉拼音 支援20870個漢字,包含完整的多音字

為了便於在網路上的傳輸,本人想辦法寫了乙個壓縮演算法,目前這個版本是壓縮好的,帶自解壓功能 以下說明壓縮思路 理想狀態下是使用stirng.prototype.localcompare了,但是由於這玩意並不是所有瀏覽器實現都一樣,例如chrome早期的就不是按拼音排序,所以這個方案先放一邊 那網上最...