XAMPP 1.6.2のpearコマンドでintl3_svn.dllが見つからないエラー

Posted on 6月 7, 2007
Filed Under PHP | Leave a Comment

DBDesignerのサイトをMapleで作り直そうと思い、ローカルでXAMPPを用いて環境構築していました。

XAMPPの1.6.2をインストール後、PEARコマンドでMapleをインストールしようとすると以下のようなメッセージが。

C:\xampp\php>pear install http://kunit.jp/download/Maple-3.2.0.tgz
PHP Warning: PHP Startup: Unable to load dynamic library ‘C:\xampp\php\ext\php_
svn.dll’ - 指定されたモジュールが見つかりません。
in Unknown on line 0
downloading Maple-3.2.0.tgz …

とりあえず、C:\xampp\php\php.iniの中にあるextension=php_svn.dllの行をコメント化して回避。

もう一度インストールを試みるもまたエラーが・・・

Notice: Undefined variable: php_errormsg in PEAR\Downloader.php on line 1498
Could not download from “http://kunit.jp/download/Maple-3.2.0.tgz”
Invalid or missing remote package file
Package “http://kunit.jp/download/Maple-3.2.0.tgz” is not valid
install failed

こっちは pear upgrade-all コマンドを打つと直りました。

前にXAMPP使ったときはこんなエラーなかったんだけどなぁ。

「exFrame」という名のXOOPSモジュール開発用ライブラリ

Posted on 8月 29, 2006
Filed Under PHP | 1 Comment

なんと、こんなものがあったとは。。。

exFrame

XOOPSのモジュールをMojaviライクに開発できるなんて。
ずいぶんかわいいわね!

もっと早く知ってたら仕事であんな苦労しなかったのに!!

PHPで「髙(はしごたか)」「﨑(たつさき)」が文字化ける(2)

Posted on 7月 20, 2006
Filed Under PHP | Leave a Comment

IBM拡張文字の文字化け調査続き。

いろいろ調べると以下のページにたどり着きました。

 [pgsql-jp: 30776] Re: 漢字3 とは

まず、いきなり知らなかったことが、、、

# ちなみに、Widnows 用ブラウザの EUC-JP は、上記ページで説明され
# ている eucJP-open(eucJP-ms) とは別物で互換性はないので注意が必
# 要です。

わぁお。
・・・こいつは知らなかった。。。

つまり、ブラウザに表示させる時の文字コードがEUCだとIBM拡張文字は表示されないと。。。
あくまでWindows上への表示はSJISになるようにしないとダメなのですね。

いろいろ試した結果、以下の設定をした上で、かつ、mb_convert_xxxxx関数の
from-encordingを’SJIS-win’という固定文字列にすることでうまくできました。

    ini_set('default_charset'              , 'SJIS');
    ini_set('mbstring.internal_encoding'   , 'eucJP-win');
    ini_set('mbstring.http_output'         , 'SJIS-win');

ポイントは「eucJP-win」と「SJIS-win」を使うところでしょうか。

まず、「default_charset」の設定を「SJIS」にし、ブラウザで表示するときの
文字エンコーディングが シフトJIS になるようにします。

次に、「mbstring.internal_encoding」の設定で内部エンコーディングが
「eucJP-win」になるようにします。
内部エンコーディングを「EUC-JP」にした場合、「髙」などのIBM拡張文字 が
半角スペースになり、文字が欠落してしまいました。

最後に「mbstring.http_output」の設定で、出力文字エンコーディングが
「SJIS-win」になるようにします。
「SJIS-win」の代わりに「Windows-31J」を指定しても大丈夫なようです。
こちらも普通の「SJIS」にした場合は、IBM拡張文字が半角スペースになってしまいました。

ちなみに、以下の設定を行った上で、かつ、mb_convert_xxxxx関数のfrom-encordingに
mb_detect_order() を指定した場合はうまくできませんでした。

    ini_set('default_charset'              , 'SJIS');
    ini_set('mbstring.internal_encoding'   , 'eucJP-win');
    ini_set('mbstring.http_output'         , 'SJIS-win');
    ini_set('mbstring.detect_order'        , 'ASCII,JIS,UTF-8,SJIS-win,EUC-JP');

試しに mb_detect_encoding() 関数を利用して自動検出した文字コードを
調べたところ、「EUC-JP」と検出されていたせいのようです。

なぜだろうと考えているうちに、なぜか急にふと思い、
detect_orderの設定を次のようにして試してみました。

    mb_detect_order(array('ASCII','JIS','UTF-8','SJIS-win','EUC-JP'));

ini_set関数ではなくmb_detect_order関数を使って配列で文字コード検出順序を渡す方法です。

まぁ、当然結果は変わるわけないだろうと思っていたんですが・・・・・・

・・・・・・えぇっ!!?

なんと、mb_detect_encoding() 関数の自動検出が「SJIS-win」になったではありませんか!
マジ意味わかんないよPHP。

試行錯誤の果て、最終的に次の記述でうまくいきました。。。

    ini_set('default_charset'              , 'SJIS');
    ini_set('mbstring.internal_encoding'   , 'eucJP-win');
    ini_set('mbstring.http_output'         , 'SJIS-win');
    mb_detect_order(array('ASCII','JIS','UTF-8','SJIS-win','EUC-JP'));

この設定をした上で文字コード変換を次のようにしてやります。

        $_enc_to=mb_internal_encoding();
        $_enc_from=mb_detect_order();
        mb_convert_variables($_enc_to,$_enc_from,$array);

たぶんこれで大丈夫。
mb_convert_encoding関数を使う場合も以下の感じで大丈夫でした。

        $_enc_to=mb_internal_encoding();
        $_enc_from=mb_detect_order();
        $string=mb_convert_encoding($string,$_enc_to,$_enc_from);

それにしても文字変換は難しいわね!PHPちゃん!!

そのうちIBM拡張文字をMySQLに保存したら文字化けたりしないか試してみたいと思います。。。
MySQL5.0.3以上ならeucjpmsで大丈夫そうだけど4.1系だとどうなのかな。。。
UTF-8にしとけば大丈夫なのだろうか。。。

PHPで「髙(はしごたか)」「﨑(たつさき)」が文字化ける(1)

Posted on 7月 20, 2006
Filed Under PHP | Leave a Comment

CSVファイルに書かれた人名にIBM拡張文字が含まれていると文字化けた。
「髙橋」が「鄕@」みたいな感じに。マジPHPうんこだべや(でもPHPは好きだよ)。

調べてみたらこんなライブラリがあったので今度実験してみよう。

 CP51932 (Windows 日本語EUCコードページ 51932) と eucJP-win の差異を吸収するためのスクリプト

こっちは参考。

 [教えて!goo] 「髙(はしごたか)」を文字コード変換

それにしてもホント日本語の文字コード複雑すぎ。
まだまだ勉強しなきゃダメだなぁ。。。

こういうのって大規模な基幹系システムだとどういう風に処理してんだろ。
メインフレームとかだと独自に文字コード持ってるから大丈夫そうだけど、
・・・JavaもUTF-8だから大丈夫なのかな?

こういう問題にぶつかるのって、PerlとPHPくらいなのかしら。

・・・と思って調べてみたらJavaでもあるのですね。
 髙(はしご高)等の漢字が文字化けしてしまいます・・・ - Java Solution
この場合は結局何が原因だったんだろう・・・。
はぁ、、Javaよくわかんないや・・・。

PHP5でfgetcsvが正常に動作しない

Posted on 7月 19, 2006
Filed Under PHP | 18 Comments

CSVのインポート機能を持ったシステムをPHP4環境からPHP5環境へ移行したら、
なぜかCSVデータを正しく読み込んでくれない。っていうか一文字目が文字化け。
超悩んだあげくぐーぐるさんで検索しても以下のような記事しかみつからず。

[PHP-dev 1205] PHP5のfgetcsv()関数について

人力検索はてな - PHP4からPHP5へソースの移(長いので略)

csvファイルを読み込むと1バイト目の日本語が文字化け

3つ目の掲示板のyossyはあたくし自身なんですが・・・。

setlocaleとかいろいろ試してもしても結局読み込まれるCSVの文字コードは
ほとんどSJISなせいなためかなんだかうまくいきません。

ちなみに検証環境はほぼFedoraCore4のデフォルトです。
PHPは5.0.4だったような気がします。

で、結局回避策として正規表現でCSVをぶった切ることにしました。

3つめのリンク先の掲示板に正規表現でCSV読み込む関数を書いたんですが、
改行を含んだCSVファイルには対応していなかったので
改行にも対応した関数を作りました。

Excel形式(というかRFC4180)に準拠したデータなら大丈夫・・・かな?

既存のfgetcsvとほとんど同じような感覚で使えるはず。うん。

<?php
    /**
     * ファイルポインタから行を取得し、CSVフィールドを処理する
     * @param resource handle
     * @param int length
     * @param string delimiter
     * @param string enclosure
     * @return ファイルの終端に達した場合を含み、エラー時にFALSEを返します。
     */
    function fgetcsv_reg (&$handle, $length = null, $d = ',', $e = '"') {
        $d = preg_quote($d);
        $e = preg_quote($e);
        $_line = "";
        while ($eof != true) {
            $_line .= (empty($length) ? fgets($handle) : fgets($handle, $length));
            $itemcnt = preg_match_all('/'.$e.'/', $_line, $dummy);
            if ($itemcnt % 2 == 0) $eof = true;
        }
        $_csv_line = preg_replace('/(?:\r\n|[\r\n])?$/', $d, trim($_line));
        $_csv_pattern = '/('.$e.'[^'.$e.']*(?:'.$e.$e.'[^'.$e.']*)*'.$e.'|[^'.$d.']*)'.$d.'/';
        preg_match_all($_csv_pattern, $_csv_line, $_csv_matches);
        $_csv_data = $_csv_matches[1];
        for($_csv_i=0;$_csv_i<count($_csv_data);$_csv_i++){
            $_csv_data[$_csv_i]=preg_replace('/^'.$e.'(.*)'.$e.'$/s','$1',$_csv_data[$_csv_i]);
            $_csv_data[$_csv_i]=str_replace($e.$e, $e, $_csv_data[$_csv_i]);
        }
        return empty($_line) ? false : $_csv_data;
    }
?>

この関数を↓こんな感じで。

<?php
    $row = 1;
    $handle = fopen("test.csv", "r");
    while (($data = fgetcsv_reg($handle)) !== false) {
        $_enc_to=mb_internal_encoding();
        $_enc_from=mb_detect_order();
        mb_convert_variables($_enc_to,$_enc_from,$data);
        $num = count($data);
        echo "<p> $num fields in line $row: </p><br />n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo nl2br($data[$c]) . "<br />n";
        }
    }
    fclose($handle);
?>

phpeclipseでホバーテキストの内容が文字化ける現象の回避策っ!!

Posted on 7月 12, 2006
Filed Under PHP | Leave a Comment

Eclipse+PHPeclipseな環境で開発しているんですが、
ソース編集時に定数や関数などの上にマウスをもっていくと
その定数や関数の内容がホバー表示される機能があります。

でも、ソースがSJIS以外だと文字化けてしまうんです・・・。

ずっと困っていたんですが、ついに回避策がっ!!

編集時のホバーテキスト(PHPDocコメント)が文字化けする[改]

素晴らし過ぎ!!!

作者さんありがとう!!

PHPプログラマーズマガジン

Posted on 7月 6, 2005
Filed Under PHP | 4 Comments

お久しぶりです。皆様。
9月に転職する事になったyossyでございます。
転職にあたって8月中に田園調布へ引っ越すことにしました。

さて、半年ほど前から私が購買し始めた雑誌のご紹介です。
『PHPプログラマーズマガジン』という、pdfの月刊誌。
カナダで発行されてるものをAsialさんが翻訳をしているものです。
PEARやSMARTY、firebirdなど、ホットな話題が多く記載されており
私的にはなかなかグッときます。

ウチが欠かさず買っている雑誌といえば、
 web creators(MdNから出てるやつ。webに特化してる雑誌)
 PHP Programmer’s magazine(今回紹介したやつ)
くらいなもんです。
もっといろいろ読みたいけれど、実際問題なかなか本読む時間って
あまりないのですよね・・・。
これらの雑誌も最近は買ってるだけで全然目を通していない状態。
web creatorsはもう一年半以上欠かさず買ってるんだけど、
学生の頃みたいにもっとじっくり読みたいな。。。

Recently


Categories


Archives