アシアル株式会社主催 開発者向け、一歩先をいくためのテクニカルセミナー

<< ディレクトリ名に%を含むページを表示... 質問一覧 includeファイルからpostできません。 >>
  • キーワードが設定されていません

  • 0P
kakasiを使った複数の文字列の変換について。

kakasiを使って、漢字からひらがなに変換していますが、
配列などに保管されたテキストなどは、全てループ関数で回しています。
しかし、皮肉にも処理が遅く、非常に時間がかかってしまいます。
  1. <?php
  2.     function kanji_to_hiragana ($text) {
  3.         // encoding to sjis
  4.         $text = mb_convert_encoding($text'SJIS');
  5.         $process = popen('echo ' . $text . ' | ' . KAKASI . ' -JH''r');
  6.         $read = '';
  7.         while(!feof($process)) {
  8.             $read .= fread($process4096);
  9.         }
  10.         pclose($process);
  11.         // encoding to utf8
  12.         return mb_convert_encoding($read'UTF-8''SJIS');
  13.     }
  14. ?>

現在はこのように組んで、これをループなどで使用しています。

配列などの複数の文字列の場合はどのように処理をしてあげればいいのかアドバイスをください。
ループで回すしかないのであれば、それで諦めます。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。

Qkakasiを使った複数の文字列の変換について。 Memory  [06月20日 19時04分] 
┗Re:kakasiを使った複数の文字列の変換について。 NurseAngel  [06月22日 01時45分] 
  ┗Re:Re:kakasiを使った複数の文字列の変換について。 Memory  [06月22日 09時19分] 

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

Re:kakasiを使った複数の文字列の変換について。

kakasi使ったこと無いからわかりませんが。

毎回プロセス開いてるから遅いのであれば、
一旦文字列に開いて変換してから配列にして戻すとか。

  1. <?php
  2. function kanji_to_hiragana_array ($array){
  3.  //デミリタは引数には存在しない値を適当に
  4.  $str=implode('&#10;',$array);
  5.  
  6.  //変換(略)
  7.  
  8.  $ret_array=explode('&#10;',$str);
  9.  return $ret_array;
  10. }

Re:Re:kakasiを使った複数の文字列の変換について。

ご返答ありがとうございます。
その方法だと結局popenを使うためにループしなくてはいけないですよね。
コマンドに配列は渡せませんし・・・。

そこで、考えた結果が、typeを使うことです。
いろいろネットで探した結果typeを使えば、ファイルから変換してくれるそうですので
implodeで適当なデリミタを設定し、一時的なファイルにその内容を記載。
そしてtypeを使って変換という方法を採用しました。

(実験は成功してます)

NurseAngelさんのアドバイスで思いついた内容なので、感謝してます。
ディレクトリ名に%を含むページを表示... 質問一覧 includeファイルからpostできません。