日本語URIのencode,decode問題

  • ページ: BugTrack
  • 投稿者: shin?
  • 優先順位: 重要
  • 状態: 提案
  • カテゴリー: その他
  • 投稿日: 2003-08-01 (金) 11:47:39
  • バージョン: 1.35

メッセージ

書き込むときに日本語uri http|https|file|ftp|... をエンコードして表示するときにデコードする機能を切望します。

http://server/doc/ほげほげ仕様書.doc

を救ってあげたいのです。

init.phpの

(\[)?                      (?#<3>:open bracket)
((?:https?|ftp|news|file)(?::\/\/[!~*'();\/?:\@&=+\$,%#\w.-]+)) (?#<4>:url)
(?(3)\s([^\]]+)\])         (?#<5>:alias, close bracket if <3>)

を修正すればいけるかなと思って試したのですが駄目でした。phpは不慣れなんでよく分かってないのですが...

解決!

(\[)?                      (?#<3>:open bracket)
((?:https?|ftp|news)(?::\/\/[!~*'();\/?:\@&=+\$,%#\S.-]+)|file(?::\/\/.+)) (?#<4>:url)
(?(3)\s([^\]]+)\])         (?#<5>:alias, close bracket if <3>)

完了の仕方は分かりません。ですが結構有用なんで残しておきます。

追記:

(v1.4.3) make_link.php(322行)

(?:https?|ftp|news):\/\/[!~*'();\/?:\@&=+\$,%#\w.-]+|file(?::\/\/.+)

にすればオケ!

さらに追記

PukiWiki 1.4.4 以降用
lib/make_link.php で以下の部分を探す('class Link_url' で検索する)

class Link_url extends Link
{
	function Link_url($start)
	{
		parent::Link($start);
	}

	function get_pattern()
	{
		$s1 = $this->start + 1;
		return <<<EOD
(\[\[             # (1) open bracket
 ((?:(?!\]\]).)+) # (2) alias
 (?:>|:)
)?
(                 # (3) url
 (?:(?:https?|ftp|news):\/\/|mailto:)[\w\/\@\$()!?&%#:;.,~'=*+-]+
)
(?($s1)\]\])      # close bracket
EOD;
	}

# (3) url の下の行*1の末尾に

|file(?::\/\/.+)

を追記すればいいハズ(mailto: が追加される前は下のパターンではなく、「追記:」に書いてあるパターンになる)

 (?:(?:https?|ftp|news):\/\/|mailto:)[\w\/\@\$()!?&%#:;.,~'=*+-]+|file(?::\/\/.+)

コメント

  • 私個人の意見は、PukiWiki 本体で救うまでは、どうだろう?です。せいぜい、インラインプラグインで逃げる程度のものだと思います。-- upk 2003-08-02 (土) 19:58:49
  • ユーザのレベルが低いので、余計な書式を覚えさせるのに苦労があります。とりあえず解決しているので問題無しですが、純国産WikiClone PukiWikiならばと日本語対応強化対策として提案しておりました。 -- shin? 2003-12-02 (火) 11:35:02
  • そのまま出すとRFC2396に違反します。かといって、URLエンコードしてしまうとIEでリンクが効かなくなる*2ようですし。本体機能として取り込むのは無理かもしれません。 -- ぱんだ 2003-12-02 (火) 23:59:36
  • InterWikiを使えばいいのでは? -- reimy 2003-12-04 (木) 01:29:58
    • InterWikiNameでの定義
      [http://server/doc/ doc]
    • 指定方法
      [[doc:ほげほげ仕様書.doc]]
  • 修正個所が1.4.2に場合、どこを直せばいいのでしょう? -- guestA? 2004-03-09 (火) 13:14:50
  • 1.4.3の場合を足しておきました -- shin? 2004-06-04 (金) 10:01:24
  • 修正個所が1.4.6に場合、どこを直せばいいのでしょう? -- guestA? 2007-11-12 (月) 21:23:59
  • 1.4.4 から現時点での最新のCVS版 (cvs:lib/make_link.php (1.37)) までの分を、上のものを参考にして書いてみました。 -- 2007-11-12 (月) 23:08:36
  • 1.4.7でさらに追記の方法をためしたのですが、fileだと希望のとおり日本語のファイル名までリンクが貼られるのですが、http や ftpがうまくいきません。やり方が悪いのでしょうか? -- parara? 2007-11-16 (金) 03:27:24
    • 今までに載ってた分も、file 限定のはずなんですが・・・。
      (?:(?:https?|ftp|news|file):\/\/|mailto:).+(?!\s)
      とすれば、http や ftp だけでなくnews でもmailto でもヒットするようになる・・・ハズ。 -- 2007-11-16 (金) 18:28:35
  • できました。ありがとうございます。 -- parara? 2007-11-16 (金) 23:17:10
  • This function should still allow the file:// prefix if this is to be used as a local wiki, also. -- JordanC 2008-06-29 (日) 07:59:50
  • 関連: BugTrack2/334 -- 2010-08-28 (土) 13:28:38
  • BugTrack2/334は、ドメインに限った話なのであまり関係ないと思いますよ。 -- Logue 2010-08-31 (火) 22:42:27
    • 同じような成分を持っているし設計で2度手間するようなハメになるよりは~、って事じゃないですか?(悪用される可能性が~という話をこちらでは誰もしていませんし) -- 2010-09-01 (水) 19:00:22


*1 Revision によっては、上の記述とは違う正規表現パターンのの場合もあります(mailto: が追加されているかどうか)
*2 "常にUTF-8としてURLを送信する"をOFFにするとうまくいくらしいけど…

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-09-01 (水) 19:00:22
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.179 sec.

OSDN