N.Katoh
typer_jp****@yahoo*****
2005年 12月 18日 (日) 14:35:12 JST
加藤です。大雪で家に籠ってます(笑) 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でそんな問題に出会ったの記憶がない(^^; いずれにしろエスケープ方法をあらかじめコメントとして入れておくとわかりや すいですね。行頭が「#」はコメントであるというのも示せますし。 #[RFC]=意見求むなので皆さんの意見も聞きたいです。 -- typer <typer_jp****@yahoo*****> like perl, stay FreeBSD http://freebsd.g.hatena.ne.jp/TransFreeBSD/ use fswiki http://aaa-www.net/~typer/cgi-bin/wiki.cgi/diary and named Noboru Katoh <typer****@chive*****>