日本語URIのencode,decode問題

メッセージ

書き込むときに日本語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(?::\/\/.+)

コメント



*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.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.222 sec.

OSDN