• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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
    OptionMeaning
    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;
      }
    ?>