所以我有一個UTF-8編碼的字符串,它可以包含全角漢字,全角假名,半角假名,romaji,數字或卡哇伊日本象徵★或♥。用PHP中的半角假名計算日文多字節字符串的長度
如果我想要的長度,我使用mb_strlen()
,它計算每個這些長度爲1。對於大多數目的來說這很好。
但是,我被問過(日本客戶)只計算半角假名爲0.5(用於文本字段的最大長度),因爲顯然這就是日文網站的做法。我這樣做使用mb_strwidth()
,其中全寬爲2,半寬爲1,然後我除以2.
但是,此方法也計算romaji字符爲1,所以類似Chocアイス
將計爲7 ..那麼我會除以2來說明漢字,我會得到3.5。但我實際上想要5.5(羅馬字+4 + 3的半角假名1.5)。
//編輯: 一些更多的信息:其同時具有充分半應爲全寬度和0.5對半寬度爲1的任何字符(甚至非假名)。例如,像¥、3@(
字符都應該是1,但像¥,[email protected](
字符都應該是0.5
// EXTRA編輯:像☆和♥符號應爲1,但mb_strwidth/2法返回它們作爲0.5
日本的系統是否有統計字符串長度的標準方式? 還是每個人只是循環通過他們的字符串,並計算不符合標準寬度規則的字符?
我自發的想法是像往常一樣使用'mb_strlen'並減去Unicode代碼點FF61和FF9F之間的字符出現次數。我可能會來解決這一問題成爲一個完整的答案後... – deceze 2011-04-12 09:51:50