トップ(最新) | <前

nDiki : URI

URI - Universal Resource Identifier

RFC3986 で定義されている識別子2005年1月に、RFC3986 が出るまでは RFC2396 で定義されていた。

RFC

  • RFC2396 - Uniform Resource Identifiers (URI): Generic Syntax

パスセグメントで使用できる文字 [RFC2396]

 pchar = unreserved | escaped | ":" | "@" | "&" | "=" | "+" | "$" | ","

及び、param との区切り ";"。 "/"、";"、"=" は予約されているためパスセグメント中で使うにはエスケープする必要がある。

ということでエスケープなしで使える文字は、

 0-9a-zA-Z | "-" |  "_" | "." | "!" | "~" | "*" |  "'" | "(" | ")" | ":" | "&" | "+" | "$" | ","

Windows では

 \/:,;*?"<>|

ファイル名に使えないので、これを考慮すると

 0-0a-zA-Z | "-" | "_" | "." | "!" | "~" | "'" | "(" | ")" | "&" | "+" | "$"

"&"、"+", "$" はパスセグメント中ではエスケープする必要はないが、reserved に含まれる文字なので使わない方が場合によっては無難。 これも考慮すると、

 0-0a-zA-Z | "-" | "_" | "." | "!" | "~" | "'" | "(" | ")"

という文字集合を使うというのも手。

関連情報

スポンサード リンク

Related term

2005年4月10日 (日)

Windows 上での Apache 2.0.53 では PATH_INFOシフト JIS このエントリーを含むはてなブックマーク

スポンサード リンク

WiKickerWindows 上での動作確認の続き。 WiKickerPPM パッケージを作成して ActivePerl 5.8.6.811 上にインストール。 依存するモジュールで、ActivePerl に入っていないものは以下の通り。

既に手元で PPM パッケージ化済みなので、これもインストールしておく。

後は RCS をパスの通っているディレクトリに入れてタイムゾーンを設定。

 TZ=JST-9

CGI プログラムとして実行。 お、表示できた。 書き込みはと。

エラー

予想していたけれど、sendmail に依存していたところ。 sendmail が見つからない場合はメールの送信をスキップするように修正。

これでうまく動くかなと思ったら、日本語名のページを作るとうまく表示できない問題を発見。

@ PATH_INFOシフト JIS で渡される

WiKicker では UTF-8 文字列をURIエスケープして WikiPageURLを生成している。 このURIにアクセスされると WiKicker は、PATH_INFO から WikiName を取り出す。 この文字列がシフト JIS になってしまっている。

Windowsファイル名に使用する charset にあわせて、Apache が変換してしまっているようだ。 調べてみると他の WikiEngine でも同様の問題にあっているという記事が見つかった。

将来の 2.0 系でパッチが取り込まれて修正されるとか、そうでないとか。

現状どうするかなぁ。 WiKicker 側でシフト JIS から UTF-8 に戻すというのもできない事はないけれど、あまりやりたくはないな。 いったんシフト JIS を介しているという時点で、シフト JIS に無い文字の扱いに関する問題をかかえてしまっているし(Apache が)。

対策案:

  • Apache 1.x 系を使う (まだ未確認だが、こちらだと勝手に変換されないらしい)
  • WiKickerPATH_INFO を使わないオプションをつける(URI Query Component は勝手に変換されない)
  • WiKicker 側でシフト JIS から UTF-8 に変換する

■ Twitter やってます。この記事が気にいったらぜひ twitter.com/Naney の follower になってください。

Google Buzz はよろしければ Naney の Google プロフィールからどうぞ。


[ 4月10日全て ]

2005年4月15日 (金)

PATH_INFO のかわりに REQUEST_URISCRIPT_NAME を使う このエントリーを含むはてなブックマーク

結局 Apache 1.3.33 でもやはり PATH_INFOUTF-8 では無くなってしまうようだ。

ということで WiKicker 側で対処。 SERVER_SOFTWARE 環境変数を見て Win32Apache だった場合、PATH_INFO を使わず REQUEST_URISCRIPT_NAME 環境変数を使って PATH_INFO にあたる文字列を取り出すようにした。

これで期待するページにアクセスできるようになった。

ただし別件で、ページ書き込み時に失敗する問題が発覚。 ページの補助情報を保存している部分の処理がこけるらしく、一度エラーになると以降のアクセスがエラーになってしまう。 要調査。


[ 4月15日全て ]

2005年4月21日 (木)

URI のパスセグメントの中の = このエントリーを含むはてなブックマーク

RFC2396 ではパスセグメント中の = は予約されているためエスケープする必要があったが、2005年1月にでたRFC3986 では必ずしもその必要がなくなったように読める。

RFC3986RFC2396からいろいろ変更点があるようなので、きちんと読んでおく必要がありそうだ。


[ 4月21日全て ]

2005年10月5日 (水)

WiKicker 0.27 リリース このエントリーを含むはてなブックマーク

機能的にちょっと区切りをつける必要がでたので、WiKikcker の新しいバージョンをリリース。 2005年5月10日より、約5カ月ぶり。

バグ修正の他、

  • 若干のHTML構造変更(メイン部分を <div class="main">でくくるようにしたり、SearchPageの検索フォームを一部修正したり)。
  • 新しいスキーマ anchor、1-area-map-image、1-area-map-limage、1-area-map-rimage を追加。
  • HTMLタグ付けブロック文法を追加(オプション)。

など。

HTMLタグ付けブロック文法におけるHTMLのサニタイズについては、HTML 4.01 仕様書を見て主に

  • HEAD の中で使うものなどは除外
  • フォーム関係、フレーム、スクリプト、オブジェクト関係は除外
  • %Script; な属性は除外
  • %URI; な属性はスクリプトかどうかチェック

といった風にフィルタリングするようにした。 結構許したので、そのまま有効にする場合には組織内利用とか個人利用向けにした方が良い。

必要に応じてルールを変更できるように、サニタイズするモジュールは設定で変更できるようにしておいた。適宜お好みで。HTMLタグ付けブロック自体はデメリットも多いのであまり使わない方が良いと思うけれど。


[ 10月5日全て ]

2006年2月4日 (土)

Last.fm Radio Player でラジオを聞いてみる このエントリーを含むはてなブックマーク

Linux 版の Last.fm Radio Player で Last.fm のラジオを聞いてみる。 まずは、サザンオールスターズの similar artist radio とか。

音質や音量にばらつきがあって、鳴らしっぱなしにするにはちょっと難がある気がするが、知らない曲に出会えたりするので面白い。

今のところ聞けるアルバム数が少なくすぐローテーションしてしまう感じだが、料金を払って Personal Radio を使うともっといろいろ聞けるのだろうか?

@ Mozilla Firefox から Last.fm Radio Player を起動する

Web ページに含まれる lastfm スキーム (lastfm://) URI から、Last.fm Radio Player が起動するようにする。

  1. about:config にアクセス
  2. 設定一覧画面で右クリックして[新規作成]->[文字列]
  3. 以下の設定を新しく追加
    • 設定名 network.protocol-handler.app.lastfm
    • 文字列 /your/installed/path/Last.fm/player

[ 2月4日全て ]

2006年5月18日 (木)

Google Desktop の web clips で RSS を読む このエントリーを含むはてなブックマーク

社内での情報共有を目的に社内 Blog を立ち上げた。次のステップは以下だ。

  • スタッフが定期的に社内 Blog をチェックする/したくなるようにもっていく。

読んでもらえなければ Blog を書くメリットがあまりなくなってしまうので、これは重要だ。 逆に良さがわかってくれば、自分も書こうという人が自然ど増えてくるはず。

まわりを見た感じだと、普段から RSS リーダを使っているというという人はほとんどいないようなので、まずは RSS リーダを普及させる必要がありそうだ。

うちのオフィスでの推奨 RSS リーダの条件としては

  • Windows で動くこと。
  • わざわざソフトを立ち上げてチェックというスタイルだと定着しなさそうなので、常駐型がいいのではないか。
  • 特定の Web ブラウザへの組み込み型ではないこと (人によって使っている Web ブラウザが違ったりするので、推奨しにくい)。

あたりかなと。むろん個人で気にいったのがあればそれにこしたことはないのだが、ここでは初めての人に薦められるものをということで。

@ Google デスクトップ 3

まずは Google Desktop を試してみる (Windows をメインに使っていなかったため、今までインストールしたことがなかった)。

ウェブ クリップで RSS/Atom フィードを読むことができる。

感蝕は「まあまあ」。 他の機能も含めて使っている場合はいいかもしれないが、巡回用の RSS リーダとして使うにはそれほど良いというほどでもないな。

フィードの表示順がちょっとわかりにくいのと、フィードの URI を誤認するのがマイナスポイント


[ 5月18日全て ]

2006年6月10日 (土)

WiKicker における PageName 最長文字数 このエントリーを含むはてなブックマーク

WiKicker では PageName を エンコードした文字列を URI に埋め込んだり、サーバで保存する際のファイル名にしたりしている。 このため、PageName の最長文字数はそれらの最長文字数に依存しているはずである。

今まで確認を後回しにしていたのだが、新しい機能の追加の際に確認しておく必要があるので調査してみた。

@ WiKicker実装

WiKicker実装がらみとして最長を決める要素としては

がある。

@ 各仕様等による制約

  • HTTP では URI の長さには制限なし (RFC2616 3.2.1)
  • Web サーバは Request-URI が長いと 414 Request-URI Too Long を返す (RFC2616 10.4.15)。Apache は LimitRequestLine ディレクティブにより、URI を含むリクエスト行のサイズを制限することができる(配布時には 8190)。
  • Internet Explorer が扱える URL の長さは 2083文字。
  • ext2ファイル名は 255文字まで(増やすこともできる)。
  • 手元の Linux 2.6.15 で試したところ、パス名は 4095文字まで。

@ WiKicker で問題が出ない PageName 最長文字数

上記の中ではファイル名による制約が一番大きい。

WiKicker 内部でファイル名として base64 (の亜種) でエンコードしたものを使っているので、元の文字列はは最長 189バイトまでなければならない。base64 だと3バイトで4文字になるため、189バイトで 252文字となる。

WiKicker ではここでさらにファイル名に ',v'、'-lock' をつける事があるので、実際には元の文字列は最長 186 バイトまでとなる。

PageName が 186 バイトまでだとすると、URL エスケープしたとして558バイト。 WikiEngine のスクリプトの URL や他のパラメータとあわせても、これぐらいなら大丈夫のはずである。

ということで WiKicker では Linux 上だと通常 PageName は 186 バイトが最長と言ってよさそうだ。 日本語の文字はだいたい UTF-8 で3バイトになるので、62 文字までということになる。

そのうち、WiKicker に制約チェックを入れることにしよう。 そのうち。


[ 6月10日全て ]

2006年6月11日 (日)

WiKicker 0.34 リリース - 添付機能のコードを追加 このエントリーを含むはてなブックマーク

2006年6月8日以来、3日ぶりのリリース。

zakwa 氏からの要望により、WikiPage のコピー直後に編集画面に移れる edit now オプションを追加。

また大きな改良として「添付機能」を追加した。 まだ最初のコードなのでエラー処理等が甘いが、それなりに動いているのでコミット。 まだ権限設定がないので、公開サーバでは使用しない方が良い。

添付ファイルのダウンロードを WiKicker 本体の CGI プログラムから行わせるか、独立の CGI プログラムにするか迷ったが、結局別物にした。

  • WiKickerURI 体系の中に、末尾にダウンロードファイル名を持ってこれる形式を作成できなかった。

というのが大きな理由。

@ 設定方法

WiKicker のページにまだ設定方法を書いていないので、こちらへ。

@ attachment CGI プログラムを設置

例えば attachment というファイル名で以下のような Perl CGI プログラムを作り、Web サーバから実行できるように設定を行う。

 #!/usr/bin/perl
 use strict;
 use warniings;
 use WiKicker::WikiCGI::AttachmentController;
 WiKicker::WikiCGI::AttachmentController
   ->new(properties_file => '対応する wiki の設定ファイル名')->run;
@ Wiki のプロパティに設定を追加

次に Wiki の設定ファイルに以下を追加。

 param.NormalPage.attachment: enable
 param.NormalPage.attachment.uri: attachment

param.NormalPage.attachment.uri には上で作った CGI プログラムURI (相対/絶対)を指定する。

これで各ページに attachment (添付)というリンクが表示され、添付機能が使えるようになる。

@ WikiPage での参照の仕方
 # リンクを作成
 [[attachment:ファイル名]]
 [[attachment:ページ名/ファイル名]] <- 別のページの添付ファイル

 # 画像をインライン表示
 [[image:attachment:ファイル名]]
 [[image:attachment:ページ名/ファイル名]]

[ 6月11日全て ]

2006年6月20日 (火)

WiKicker 0.35 リリース - 添付機能の修正など このエントリーを含むはてなブックマーク

添付機能を有効にすると、添付ファイルが無いページに対応するディレクトリが無条件に作られてしまう問題を修正。

それから日本語ファイル名のファイルを WikiPage に添付した際、Internet Explorer でそのファイルをダウンロードして保存しようとすると URI エスケープされた文字列がデフォルトの保存ファイル名になってしまいよろしくない。 このため、Content-Disposition ヘッダをつけてレスポンスを返すためのダウンロード用のリンクも追加。

Cotent-Disposition ヘッダでファイル名を指定する際、

ファイル名シフト JIS でエンコードしてしまうようにした。

ファイル名シフト JIS で表現できない文字があるかもしれないし、Accept-Language に ja があったからといって Windowsロケール日本語になっているという保証もないので、かなりいい加減なコードである。

なにか良い方法があったら修正したい。


[ 6月20日全て ]

2006年7月8日 (土)

Perl v5.8.8CGI.pmPATH_INFO 処理の問題にぶつかる このエントリーを含むはてなブックマーク

手元の WiKicker (や DiKicker) で、「C++」という文字列を含む URI にアクセスしたらエラー

 Nested quantifiers in regex; marked by <-- HERE in m//C++ <-- HERE .html$/ at (eval 27) line 7.

正規表現の一部として使う時には \Q...\E していたと思ったが抜けがあったか。 とコードをチェックしてみたが、それっぽいところなし。 そもそも、Perl 5.005_03 だと問題おきていないし。

確認したら CGI.pm の url() の中でのエラーだった。 quotemeta されていない。

Perl v5.8.8 に含まれている CGI.pm 3.15 で問題を確認。3.17 までは駄目で、3.19 以降だと \Q...\E するように修正されている (3.18 は CPAN にないので不明)。

標準 Perl ライブラリバグを踏んだか……。 標準 Perl ライブラリアップグレードはなにかと面倒なので、システム要件にはしたくはないんだよねぇ。


[ 7月8日全て ]

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 0.06844s / load averages: 0.08, 0.16, 0.13
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)