mb_convert_kana()
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
将“kana”从一个转换为另一个(“zen-kaku”、“han-kaku”等)
说明
mb_convert_kana(string $str[,string $option="KV"[,string $encoding= mb_internal_encoding()]]): string
对字符串str执行“han-kaku”-“zen-kaku”转换。该功能仅对日语有用。
参数
- $str
正在转换的字符串
- $option
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
$encoding参数为字符编码。如果省略,则使用内部字符编码。
返回值
The converted string.
范例
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" alpha-numeric to "han-kaku" */ $str = mb_convert_kana($str, "KVa"); ?>
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).
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); ?>
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");
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;
}
?>