はてブとページ名の長いWikiの、登録URLの長さ問題

MediaWikiなど、日本語ページ名をそのままURLに使っているWikiは、URLが長くなりすぎて、はてブに正しく登録されないね、という問題がある。
3
shino @freedomcat

#saveMLAK の日本語ページ名のURLをはてブに追加して、はてブから遷移しようとすると文字化けページで「このページはありません」になってしまふ。にゃぜ。

2011-05-03 01:23:08
Masao Takaku @tmasao

@freedomcat この件はてな側の仕様のようでして。 http://goo.gl/pfHSx たしかにリンクURLは256文字で切られてますね。 http://goo.gl/X5HQN 極端に長い日本語ページ名は気を付けたほうがよいかも。 #saveMLAK

2011-05-03 23:31:40
shino @freedomcat

RFC2616のNotesにURLが255bytes以上だとうまくURL扱えないクライアントがあるからそれ以上はやめろという記述があるなぁ。はてブ仕様はそっからきてると考えるのが妥当かなぁ。 http://j.mp/81cOZN

2011-05-04 00:18:05
shino @freedomcat

Wikipediaの場合は、ページ名が255byte以下、UTF-8なページ名はさらにそれ以下となってるのか。 http://j.mp/iz1qvG

2011-05-04 00:28:38
Kazuhiro hokkaidonis @kzhr

@freedomcat 以前,法律名が長すぎて略称で項目を建てたものがあったように記憶します。具体的に出てきませんが……

2011-05-04 00:29:24
shino @freedomcat

@tmasao RFCとWikipediaを見ると、MediaWiki側でページ名の長さの制限入れるのが正解ぽい感じがします。今、どこに設定あるのか、調べてます。念のため #saveMLAK の施設名で最大長のページ名、調べられますか?

2011-05-04 00:31:31
shino @freedomcat

@kzhr よくわかってないのですが、Wikipediaでページを新規作成するときって、ページ名長すぎるとエラーとかになるのでしょうか?

2011-05-04 00:38:01
Kazuhiro hokkaidonis @kzhr

@freedomcat エラーになるようですね。ウィキリンクも無効になるようです

2011-05-04 00:39:49
shino @freedomcat

@kzhr ありがとうございます。システム側で制限いれてるんですね。

2011-05-04 00:40:20
Ninomy @ninomy

. @freedomcat @kzhr 制限入れてるというか,いろいろの限界です.ページ名の長さの上限は255 Byteです.

2011-05-04 00:43:46
shino @freedomcat

@ninomy savemlak.jpのこのページ、UTF-8なページ名の長さが270Byteで、 httpからはじまる長さだと294Byteになるの。 http://goo.gl/UF8n2

2011-05-04 00:48:36
shino @freedomcat

@ninomy で、ページ名の長さの制限をsavemlak.jpではやっているのかどうかがよくわからないんだけど、MediaWikiでは一般的にUTF-8なページ名の長さってどうやって設定しているかわかりますか?

2011-05-04 00:49:41
Ninomy @ninomy

@freedomcat ページ名の長さはデータベースの問題であって,カーネルで設定しています.これの再設定はやってやれないことはないのかもしれませんが,苦労しますよ.

2011-05-04 01:04:55
Ninomy @ninomy

なんで270Byteという計算になったのかよくわからない.30字で270Byteって1字30Byte?そんなアホな

2011-05-04 01:12:41
Ninomy @ninomy

UTF-8だと1文字1バイト~7バイトの幅で変化するのでどうがんばっても9Byte/charはありえない

2011-05-04 01:14:11
Ninomy @ninomy

ascii文字は1字1Byte,日本語文字はほとんど1字3Byteで計算すればいい

2011-05-04 01:14:38
shino @freedomcat

@ninomy UTF-8のURLエンコード問題。一文字、9Byteになる。たとえば「あ」は「%E3%81%82」。なので、日本語ページ名は28文字で252Byte。

2011-05-04 01:18:31
Ninomy @ninomy

@freedomcat URLエンコードすると,1バイトぶんを3文字=3バイト消費して表現することになるのです.そして僕はURLにエンコードした状態での話をしていません.

2011-05-04 01:22:13
Ninomy @ninomy

@freedomcat すなわち,%E3%81%82 は, %E3, %81, %82 で3バイト計算です.むろん,URL長は1バイトをASCII文字3つで表現するため3倍のバイト長になります.

2011-05-04 01:23:09
Masao Takaku @tmasao

@freedomcat いまのところ最大の長さはこれ: http://bit.ly/iiZOwq 続いて http://bit.ly/l0EtQk ですね…。 #saveMLAK

2011-05-04 01:36:05
shino @freedomcat

tumblrもevernoteも長いurlページ、クリップできる。うん。

2011-05-04 01:46:51
shino @freedomcat

@tmasao ありがとうございます。MediaWikiはページ名85文字(ja)まで作れるのが仕様(テーブル構造がvarchar(255) utf8_binで、ここで決まってる)ですね。で、URLエンコードされると765Byteになるとこまで理解しました。 #saveMLAK

2011-05-04 02:30:56
shino @freedomcat

一方で、はてブにURL長さの仕様を変えてというのも、同じようにデータテーブルの構造を変える必要があると思われるので、これも難しいんだろうなぁ~。と、思ったりしている。悩ましいけど、はてブは見なかったことにしようか。evernoteやtumblrはクリップできるし。

2011-05-04 02:35:46
shino @freedomcat

データベースの構造以外にも、はてブはたぶん、携帯ユーザのニーズも想定していて、携帯だと安全なURL長は256byteなんだろうなぁ。んー。

2011-05-04 03:08:17
shino @freedomcat

URL長を256byteまでとする仕様はいいんだけど、問題があるとすれば、はてブにURL登録したときに、勝手にURL改変されちゃう(切られちゃう)、エラーがあがらず改変URLが登録されてしまう点ですね。

2011-05-04 03:22:18