[PHP-users 30058] Re: fgetcsv関数について

Tadashi Jokagi ml @ elf.no-ip.org
2006年 8月 17日 (木) 10:38:16 JST


      ぢょ〜@よくきたなです.

日本情報電信)兵頭さんの「[PHP-users 30056] fgetcsv関数について」から
>しているのですが、fgetcsv関数にて「、」区切りの「”」を囲み文字としていた
>のですが
>とある文字列で「”」が上手く認識されず意図しない動作をします。

      fgetcsv の区切り文字は 1 バイトのみ使用できるので,マルチバイト
    は使用できません.下記コード.

PHP_FUNCTION(fgetcsv)
{
        char delimiter = ',';   /* allow this to be set as parameter */
        char enclosure = '"';   /* allow this to be set as parameter */
        const char escape_char = '\\';
(snip)
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|Zss",
                                        &fd, &len_zv, &delimiter_str, &delimiter_str_len,
                                        &enclosure_str, &enclosure_str_len) == FAILURE) {
                        return;
                }       

                if (delimiter_str != NULL) {
                        /* Make sure that there is at least one character in string */
                        if (delimiter_str_len < 1) {
                                php_error_docref(NULL TSRMLS_CC, E_WARNING, "delimiter must be a character");
                                RETURN_FALSE;
                        }

                        /* use first character from string */
                        delimiter = delimiter_str[0];
                }
                                                  ↑この辺

#マニュアルの「 1 文字」って修正した方がいいなぁ

      多分言いたいことは半角の「,」「"」だと思うのですが,とある文字
    は明確にした方がいいでしょう.おそらく,上記で「escape_char」に
    バックスラッシュが指定されているので,「表」などいわゆる 5CH 問題
    じゃないかと思います.

$ echo -n "表" | iconv -f UTF-8 -t Shift_JIS | od -tx1
0000000 95 5c
0000002
$ echo -n "\\" | iconv -f UTF-8 -t Shift_JIS | od -tx1
0000000 5c
0000001

     一旦 Shift_JIS 以外の文字列に変更して一時ファイルを作成し,それを
    読み込むのが実装の手間としては一番簡単だと思います.

#popen とかで "cat <FILE> | iconv -f Shift_JIS -t EUC-JP" とか指定し
 て出力のファイルディスクリプタを読み込むってのもありかも(面倒くさ…

-- 
----.----1----.----2----.----3----.----4----.----5----.----6----.----7
Tadashi Jokagi/Shibuya city mailto:elf @ elf.no-ip.org
YokukitanaII http://elf.no-ip.org/
Yokukita blog http://blog.poyo.jp/
Yokukita wiki http://wiki.poyo.jp/


PHP-users メーリングリストの案内