トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BBS-サポート掲示板/987

ページの作成や編集にはユーザ登録が必要です。

 日本語が含まれるURLをリンクしたい - MRB (2015年01月13日 19時52分47秒)

最近のブラウザではURL欄にURLを日本語にしたかたちで表示してくれるものが多いです。たとえば、Wikipediaの「ウィキペディア」のページのURLは「http://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3%E3%82%AD」ですが、ブラウザ(chromeやFirefox)では「http://ja.wikipedia.org/wiki/ウィキペディア」と表示してくれます。

ここで、「http://ja.wikipedia.org/wiki/ウィキペディア」と表示されたものをFSwikiに張り付けると、期待するリンクにはなりません。

ユーザー側にURLエンコードさせるのは難しいので、何とかWiki側で対応したいのですが、何かうまい方法はあるでしょうか。Parser.pmをいじれば何とかなりそうではありますが。。。

  • http://fswiki.sourceforge.jp/cgi-bin/wiki.cgi?page=BugTrack-plugin%2F157 のinclude_htmlプラグインを使うと日本語を含むリンクうまくいきましたよ - た (2015年01月13日 21時59分09秒)
  • ありがとうございます。リンクのためだけに当該プラグインを使ってもらうのは難しそうなので、当面は日本語URLを変換してくれるウェブサイトへのリンクを編集ページに追加しておいて、ユーザに対応してもらうようにしました。 - MRB (2015年02月03日 02時29分34秒)
  • あまり良い方法ではないかもしれませんが・・・以下のような修正で"[日本語を含むURL]"という記述をそのままリンクとして出力にすることができると思います。Perser.pm の parse_line 関数内の "任意のURLリンク"の部分です。安全の為[]内のURLのみ対象としました。 - KG (2015年02月17日 19時36分01秒)
       # 任意のURLリンク
       elsif ($source =~ /^\[([^\[]+?)\|(.+?)\]/
           || $source =~ /^\[()([^\[]+?)\]/
           )
       {
           my $label = $1;
           my $url   = $2;
           $source = $';
           if (   index($url, q{"}) >= 0
               || index($url, '><') >= 0
               || index($url, 'javascript:') >= 0)
           {
               push @parsed, $self->parse_line('<<不正なリンクです。>>');
           }
           else {

               # URIを作成
               my $wiki = $self->{wiki};
               my $uri  = $wiki->config('server_host');
               if ($uri eq q{}) {
                   $uri = $wiki->get_CGI()->url(-path_info => 1);
               }
               else {
                   $uri
                       = $uri
                       . $wiki->get_CGI->url(-absolute => 1)
                       . $wiki->get_CGI()->path_info();
               }
               if ($url =~ /^(?:https?|ftp|mailto):/) {
                   $label = $label eq "" ? $url : $label;
                   push @parsed, $self->url_anchor($url, $label);
               }
               else {
                   push @parsed, $self->url_anchor($uri . '/../' . $url, $label);
               }
           }
       }
  • ちなみに、URLとして記述されたものをそのまま出力する為、当然ながらブラウザーによっては該当のリンク先にならない可能性がありますが、最近のブラウザーであれば大丈夫でしょう。モバイル端末でどうなるかはわかりませんが・・・ - KG (2015年02月17日 19時45分09秒)
  • うおおおお、ありがとうございます。試してみます - MRB (2015年02月18日 22時14分11秒)
お名前: コメント:

最終更新時間:2015年02月18日 22時14分11秒