<< XML形成式 質問一覧 Apache2.2.14が起動しません >>

  • 100P
kakasiをphpから呼び出し、漢字混じりの文章をひらがなの文章に変換する

こんにちわ。

kakasiをphpから呼び出し、漢字混じりの文章をひらがなの文章に変換しようとしています。

kakasiをサーバーにインストールし、
http://www.pahoo.org/e-soul/webtech/php03/php03-01-01.shtm
のサンプルのkakasiの実行パスを任意のものに修正してアップし、ブラウザで実行すると問題なく動きます。

これを参考に単純に漢字混じりの文章をひらがなの文章に変換しようとしているのですが、うまく表示されません。
  1. $kakasi = 'usr/local/bin/kakasi';
  2.  
  3. $text = 'これは漢字混じりの文章をひらがなの文章にするテスト用の文章です';
  4. $hiragana = popen("echo '$text' | $kakasi -JH", "r");
  5. pclose($hiragana);
  6.  
  7. echo $hiragana;

上記のように書いているのですが表示されません。
どのあたりが違うのでしょう?
ご教示いただけますでしょうか。

以下は参考までに。
  1. %kakasi -v
  2. KAKASI - Kanji Kana Simple Inverter  Version 2.3.4
  3. Copyright (C) 1992-1999 Hironobu Takahashi. All rights reserved.
  4.  
  5. Usage: kakasi -a[jE] -j[aE] -g[ajE] -k[ajKH] -E[aj] -K[ajkH] -H[ajkK] -J[ajkKH]
  6.               -i{oldjis,newjis,dec,euc,sjis} -o{oldjis,newjis,dec,euc,sjis}
  7.               -r{hepburn,kunrei} -p -s -f -c"chars"  [jisyo1, jisyo2,,,]
  8.  
  9.       Character Sets:
  10.        a: ascii  j: jisroman  g: graphic  k: kana (j,k     defined in jisx0201)
  11.        E: kigou  K: katakana  H: hiragana J: kanji(E,K,H,J defined in jisx0208)
  12.  
  13.       Options:
  14.       -i: input coding system    -o: output coding system
  15.       -r: romaji conversion system
  16.       -p: list all readings (with -J option)
  17.       -s: insert separate characters (with -J option)
  18.       -f: furigana mode (with -J option)
  19.       -c: skip chars within jukugo (with -J option: default TAB CR LF BLANK)
  20.       -C: romaji Capitalize (with -Ja or -Jj option)
  21.       -U: romaji Upcase     (with -Ja or -Jj option)
  22.       -u: call fflush() after 1 character output
  23.       -w: wakatigaki mode
  24.  
  25. Report bugs to <bug-kakasi@namazu.org>

コメント一覧

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

Re:kakasiをphpから呼び出し、漢字混じりの文章をひらがなの文章に変換する

一点だけ気になったので(汗

>$kakasi = 'usr/local/bin/kakasi';

もしtypoでなければ、なぜフルパス(/からの記述)になっていないのでしょう。
ツリーへ TOPへ

Re:Re:kakasiをphpから呼び出し、漢字混じりの文章をひらがなの文章に変換する

>>$kakasi = 'usr/local/bin/kakasi';

>もしtypoでなければ、なぜフルパス(/からの記述)になっていないのでしょう。

すみません。
$kakasi = '/usr/local/bin/kakasi';
とするべきでしたでしょうか。

このパスについてはとりあえず、
レンタルサーバーを使っているので自分のユーザーネームが入っていたため、
適当なパスを入れています。
その時に気づかず、そのようになっていました。。

よろしくお願いします。
ツリーへ TOPへ

Re:Re:Re:kakasiをphpから呼び出し、漢字混じりの文章をひらがなの文章に変換する

あ、いや。実際に動いているスクリプトに「正しいpath」が設定されていれば問題ありません。
ツリーへ TOPへ

Re:kakasiをphpから呼び出し、漢字混じりの文章をひらがなの文章に変換する

echo $hiragana;

これって、プロセスIDが表示されるだけじゃないでしょうか。
実際の出力は fread なんかをつかって取得します。

  1. <?php
  2. $kakasi = '/usr/local/bin/kakasi';
  3. $text = 'これは漢字混じりの文章をひらがなの文章にするテスト用の文章です';
  4. $hiragana = popen("echo '$text' | $kakasi -JH""r");
  5. $read = fread($hiragana4096);
  6. pclose($hiragana);
  7. echo $read;

で、kakasi って内部処理はEUCですよね。
表示が文字化けする場合は mb_convert_encoding して
入出力する必要があるかもです。
ツリーへ TOPへ

Re:Re:kakasiをphpから呼び出し、漢字混じりの文章をひらがなの文章に変換する

mgngmgngさん

こんにちわ。

この方法でうまくいきました。
ありがとうございます!

>これって、プロセスIDが表示されるだけじゃないでしょうか。
そうですね。
Resource id #1
と表示されて「?」って思ってました。

なるほど。freadを使うんですね。
少し調べたのですが、
--
ストリング = fgets(ファイルポインタ, [読み込むバイト数])
fgets関数の[読み込むバイト数]は1024(1k)バイトがデフォルトで、
gets関数の終了は、指定した[読み込むバイト数]に達したか、改行文字を検出したか、ファイルポインタが末尾に達したか、のいずれかです。
--
ここで
$read = fread($hiragana, 4096);
のように4096(4kb)にしているのはなぜでしょうか?
ツリーへ TOPへ

Re:Re:Re:kakasiをphpから呼び出し、漢字混じりの文章をひらがなの文章に変換する

> $read = fread($hiragana, 4096);
> のように4096(4kb)にしているのはなぜでしょうか?

あ、いや、とくに深い意味はないですよ...^^;
4096がすきなだけです(なんだそれ...)

まあ、これだと4kb以上読み込めないので

  1. <?php
  2.  
  3. // 略
  4.  
  5. $read = '';
  6. while(!feof($hiragana)) {
  7.   $read .= fread($hiragana4096);
  8. }
  9.  
  10. // 略

などしとくといいとおもいます。
ツリーへ TOPへ

Re:Re:Re:Re:kakasiをphpから呼び出し、漢字混じりの文章をひらがなの文章に変換する

mgngmgngさん

ありがとうございます。
なるほど。

改行コードがみつかると終了しちゃうんだ?
とかいくつか疑問点がまだあるのですが、いろいろ試してみたいと思います。

ありがとうございました!
ツリーへ TOPへ
XML形成式 質問一覧 Apache2.2.14が起動しません