PHPerKaigi 2021

mb_convert_kana

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

mb_convert_kanaConvert "kana" one from another ("zen-kaku", "han-kaku" and more)

Beschreibung

mb_convert_kana ( string $string , string $mode = "KV" , string|null $encoding = null ) : string

Performs a "han-kaku" - "zen-kaku" conversion for string string. This function is only useful for Japanese.

Parameter-Liste

string

The string being converted.

mode

The conversion option.

Specify with a combination of following options.

Applicable Conversion Options
Option Meaning
r Convert "zen-kaku" alphabets to "han-kaku"
R Convert "han-kaku" alphabets to "zen-kaku"
n Convert "zen-kaku" numbers to "han-kaku"
N Convert "han-kaku" numbers to "zen-kaku"
a Convert "zen-kaku" alphabets and numbers to "han-kaku"
A Convert "han-kaku" alphabets and numbers to "zen-kaku" (Characters included in "a", "A" options are U+0021 - U+007E excluding U+0022, U+0027, U+005C, U+007E)
s Convert "zen-kaku" space to "han-kaku" (U+3000 -> U+0020)
S Convert "han-kaku" space to "zen-kaku" (U+0020 -> U+3000)
k Convert "zen-kaku kata-kana" to "han-kaku kata-kana"
K Convert "han-kaku kata-kana" to "zen-kaku kata-kana"
h Convert "zen-kaku hira-gana" to "han-kaku kata-kana"
H Convert "han-kaku kata-kana" to "zen-kaku hira-gana"
c Convert "zen-kaku kata-kana" to "zen-kaku hira-gana"
C Convert "zen-kaku hira-gana" to "zen-kaku kata-kana"
V Collapse voiced sound notation and convert them into a character. Use with "K","H"

encoding

Der encoding Parameter legt das Zeichenencoding fest. Wird er nicht übergeben so wird die interne Zeichenkodierung genutzt.

Rückgabewerte

The converted string.

Changelog

Version Beschreibung
8.0.0 encoding is nullable now.

Beispiele

Beispiel #1 mb_convert_kana() example

<?php
/* Convert all "kana" to "zen-kaku" "kata-kana" */
$str mb_convert_kana($str"KVC");

/* Convert "han-kaku" "kata-kana" to "zen-kaku" "kata-kana" 
   and "zen-kaku" alphanumeric to "han-kaku" */
$str mb_convert_kana($str"KVa");
?>

add a note add a note

User Contributed Notes 4 notes

up
2
jdavide222 at hotmail dot com
7 years ago
to make this function work you have to add following two lines above this function.

mb_language("Ja");
mb_internal_encoding("utf-8");

mb_convert_kana($_POST['something_value'], "rna");
up
2
dn at littlealf dot net
17 years ago
It seems that mb_convert_kana() doesn't convert symbols such as ' (single quoatation). It affected my program when I insert data into database.

So, I've found 2 ways to solve this.
1) Use Javascript to convert those non-supported symbols before sending query string to your php page.
2) Use php function, str_replace $str, to replace those non-supported symbols. For example, $str = str_replace("'", "", $str);
where the first single quot is half-width(han kaku), and the second one is full-width(zen kaku).
up
0
d at safetypub dot org
15 years ago
I didn't find Japanese sorting function.
(mb_sort_kana or something)
Only SJIS encoding treats hankaku kata kana,
I can't post here copy & paste version script.
I'm sorry...
You will replace comments with appropriate japanese string,
and write exception handlings between lines as you like.

<?php
mb_internal_encoding
("SJIS");

$moji = /*"aiueo...wawon -?.," <- serialized hankaku kata kana 50 on hyou goes here*/;
$moji .= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxwz0123456789";

for(
$i = 0; isset($moji[$i]); $i++){
   
$pittan[$moji[$i]] = $i;
}

function
cmp($a, $b)
{
   if (
$a == $b) {
       return
0;
   }
   return
iter(mb_convert_kana($a, "askh") ,mb_convert_kana($b, "askh"), 0);
}

function
iter($a, $b, $i){
    global
$pittan;
    if(!isset(
$a[$i]) || !isset($b[$i])){
        return (isset(
$b[$i]))? -1 : 1;
    }
    if (
$pittan[$a[$i]] == $pittan[$b[$i]]){
        return
iter($a, $b, ++$i);
    }
    return ((
$pittan[$a[$i]]) < ($pittan[$b[$i]]))? -1 : 1;
}

echo
"<pre>";
$arr = array(/*some japanese array here*/);
usort($arr, "cmp");
var_dump($arr);
?>
up
-31
sohel62 at yahoo dot com
13 years ago
I did that manually when I was not getting  expected result using mb_convert_kana().
<?php
/*
* @author Taslim Mazumder Sohel
* @deprecated 1.0 - 2008/02/19
*
*/
function han_kaku_to_jen_kaku($str){
       
$replace_of = array('ヴ','ガ','ギ','グ',
                           
'ゲ','ゴ','ザ','ジ',
                           
'ズ','ゼ','ゾ','ダ',
                           
'ヂ','ヅ','デ','ド',
                           
'バ','ビ','ブ','ベ',
                           
'ボ','パ','ピ','プ','ペ','ポ');
       
$replace_by = array('ヴ','ガ','ギ','グ',
                           
'ゲ','ゴ','ザ','ジ',
                           
'ズ','ゼ','ゾ','ダ',
                           
'ヂ','ヅ','デ','ド',
                           
'バ','ビ','ブ','ベ',
                           
'ボ','パ','ピ','プ','ペ','ポ');
       
$_result = str_replace($replace_of, $replace_by, $str);
       
       
$replace_of = array('ア','イ','ウ','エ','オ',
                           
'カ','キ','ク','ケ','コ',
                           
'サ','シ','ス','セ','ソ',
                           
'タ','チ','ツ','テ','ト',
                           
'ナ','ニ','ヌ','ネ','ノ',
                           
'ハ','ヒ','フ','ヘ','ホ',
                           
'マ','ミ','ム','メ','モ',
                           
'ヤ','ユ','ヨ','ラ','リ',
                           
'ル','レ','ロ','ワ','ヲ',
                           
'ン','ァ','ィ','ゥ','ェ',
                           
'ォ','ヵ','ヶ','ャ','ュ',
                           
'ョ','ッ','、','。','ー',
                           
'「','」','゙','゚');
       
$replace_by = array('ア','イ','ウ','エ','オ',
                           
'カ','キ','ク','ケ','コ',
                           
'サ','シ','ス','セ','ソ',
                           
'タ','チ','ツ','テ','ト',
                           
'ナ','ニ','ヌ','ネ','ノ',
                           
'ハ','ヒ','フ','ヘ','ホ',
                           
'マ','ミ','ム','メ','モ',
                           
'ヤ','ユ','ヨ','ラ','リ',
                           
'ル','レ','ロ','ワ','ヲ',
                           
'ン','ァ','ィ','ゥ','ェ',
                           
'ォ','ヶ','ヶ','ャ','ュ',
                           
'ョ','ッ','、','。','ー',
                           
'「','」','”','');       
       
$_result = str_replace($replace_of, $replace_by, $_result);
        return
$_result;
    }
?>
To Top