Naoki Takezoe
takez****@gmail*****
2005年 12月 25日 (日) 08:39:02 JST
竹添です。 05/12/18 に N.Katoh<typer_jp****@yahoo*****> さんは書きました: > 加藤です。大雪で家に籠ってます(笑) > > On Sun, 18 Dec 2005 11:51:56 +0900 > Naoki Takezoe <takez****@gmail*****> wrote: > > > 竹添です。 > > > > 05/12/18 に Makamaka<maka2_fswik****@donzo*****> さんは書きました: > > > まかまかです。 > > > > > > Naoki Takezoe <takez****@gmail*****> wrote: > > > >URLエンコードは確かにあまりうまい方法だとは思いませんが、手でいじる > > > >ときのことを考えるのであれば > > > > > > > >> 分割する「=」の前後の空白が無視されることを利用して > > > > > > > >という実装上の都合を意識してないとはまってしまいそうな気が…。 > > > > > > > >もちろんこれを意識しなくてはいけない場合というのはレアケースでしょ > > > >うけれど、様々なプラグインから利用される関数でもあるわけですし、や > > > >るならきちっとエスケープ処理を実装しとくべきなんじゃないかなぁと思 > > > >います。 > > > > > > > ># そうすれば4.0でもそのコードが使えますし…。 > > > > > > うーん、言われてみれば。 > > > であれば、いわゆるCSV準拠で > > > キーに'='か'"'がある場合、'"'は'""'に変換した上で'"'で囲む。 > > > という処理はどうでしょうか。 > > > (これも手でいじる場合に戸惑うと言われればそれまでですね……) > > > > 方法はどうあれ結局何らかの方法でエスケープしなければいけないわけで > > その方法が妥当かどうか、というところが判断基準になると思います。 > > CSV準拠の方法であれば、FSWikiでのテーブル記法でも使用していますし、 > > 割と一般的な方法なので納得感があると思うのですが、 > > ただ、「CSVではない所にその方法が出てくる」という点でちょと微妙かなと思 > います。ただ、あらかじめ設定ファイルにCSV準拠である旨のコメントを入れて > おけば驚きも少ないですね。 > > > > 分割する「=」の前後の空白が無視されることを利用して > > > > というのは、確かにうまい方法だとは思いますが、実装上都合がいい回避策と > > いうのがありありと見えてしまいますし、逆にこの仕様を知らない人にとって > > はコードを読まなければ絶対に出てこない発想だと思うんですよね。 > > たしかに独自仕様なのでわかり難いですね。 > > > じゃあどうすればという話ですが、「key=value」形式で一般的な方法という所 > で考えてみると、UNIX系ではsh、Win系ではiniファイルとなります。 > > shだと「"」「'」「\」それぞれ3様のエスケープ方法がありますが、「\」だけ > でも真面目に実装すればうまくエスケープできるようになります。これは最初の > 案に近いですが、 > > ・「\=」→リテラルとしての「=」 > ・「\\=」→リテラルとしての「\」+区切りとしての「=」 > ・「\\\=」→リテラルとしての「\=」 > ・「\\\\=」→リテラルとしての「\\」+区切りとしての「=」 > ... > > と、「\」の対をちゃんと認識させる様にするという事です。 > 問題として、load時に「\a」とかの解釈をどうするかという点でしょうか。 > 最初の案では「\\」「\=」→「\」「=」だけでしたが、「\a」→「a」までやる > かどうか。 > また、keyのみにするかvalueもエスケープの解釈をするかどうか。 > 互換性を考えると「\\」「\=」だけにとどめた方が影響範囲が少なくて良いです > が、「\」がエスケープ文字として扱われる場合とそうでない場合があるのは > 一貫性に欠けるともいえます。 > > あと、iniファイルは...どうなってましたっけ。 > iniでそんな問題に出会ったの記憶がない(^^; > > > いずれにしろエスケープ方法をあらかじめコメントとして入れておくとわかりや > すいですね。行頭が「#」はコメントであるというのも示せますし。 今の仕様だとキーや値に改行を含めることができないという問題もありますので 値とキーの両方をエスケープ対象として、以下のようなエスケープ方法はどうで しょうか。 ・値またはキーに=が含まれている場合は全体を"で囲む ・上記とは関係なく改行それぞれは\\n、\\rにエスケープ、\は\\にエスケープ ・全体を"で囲んだ場合、値またはキーに"が含まれていた場合は""にエスケープ 例えばキーがThis is "key"、値がThis is "value"の場合、 "This is ""key"""="This is ""value""" のような感じになります。 エスケープ方式そのものはFSWikiのCSV記法でのエスケープ方式を拡張したもの ですが、=で分割することになるので特にCSVの記法という印象は与えないと思い ますし、現在FSWikiのパーサで使用している正規表現を流用可能なので実装も それほど難しくないでしょう。 また、バージョンアップ時の互換性という点も重要になりますが、現在の形式のファ イルも問題なく読み込めるようにできると思います。 -- Naoki Takezoe <takez****@gmail*****>