kokodayo.net
FSWikiまとめ
FreeStyleWiki
編集FAQ

一文字のページ名のアンカを付けない

この際日本語一文字のリンクは却下!にしてしまうパッチ


上記プラグインですばらしい対応がされましたので、ここのページでの対応は参考程度までとしてお勧めはしません。

 
 日本語一文字の自動リンクが化ける問題を避けつつ自ページのリンクを付けずにページ内アンカを生かします。
 自動リンクの多いページはそれだけ重くなるためご注意といったようなことでこの手の方法は現在公開されていないようです。それと逆にサイト運用側の使用上の判断が多くなってしまうわずらわしさも一因かもしれませんが、リンクにならないときの判断材料がはっきりしていればよさそうです。
 さすがに若干遅くなるものの調整次第では、見た目によらず案外つかえるようです。但し、1ページあたりの自動リンクの数はおおよその上限ををきめるなどのローカルルールを決めたほうがよいでしょう。ページの所在不明の?は速度優先で付けていません。

sub wiki_anchor {
 	my $self = shift;
 	my $page = shift;
 	my $name = shift;
 	my $anchor = undef;
 	if(!defined($name) || $name eq ""){
 		$name = $page;
 	}
($page, $anchor) = split(/#/, $page, 2) if($page =~ m/#/);
 if(!defined($anchor)) {
  if($self->{wiki}->get_CGI()->param('page') ne $page ){
    my $str_len = length($page);
    if($str_len ne 2){
     return "<a href=\"".$self-{wiki}->create_page_url($page)."\" class=\"wikipage\">".&Util::escapeHTML($name)."</a>";
    }else{
     return $name;
    }
  }else{
   return &Util::escapeHTML($name);
  }
 }else{
   return "<a href=\"".$self->{wiki}->create_page_url($page).(defined($anchor) ? "#$anchor" : '') . '" class="wikipage">' . &Util::escapeHTML($name)."</a>";
 }
}

 ご注意

 プラグインによっては上記の処理を通さないようにWiki変換ではなく、<a href〜の参照にしてHTML変換に切り替える必要があります。
 これでanchorプラグインと併用することによりほとんど意識することなく文字化けを回避しつつ自動リンクを有効に使えるようになりました。

変換に関わるプラグインの例

  • Access
  • Recent
  • Indexes

 この対処の限界とその先

 ページの所在不明の?は速度優先で付けていませんのでリンク管理が把握できない場合は使用しない方がよいかと思われます。
半角英数2文字も2バイトでリンクしなくなりますが、このやり方ではこのあたりが限界に近いでしょう。
 他に考えられるとすれば2バイトのページ名に#をつけて保存するようにしておいて表示する段階で見えないようにするとか英数2バイトは全角に置き換えするとかデータの互換性に問題がでそうなので、2バイトのページの処理としての保存と表示の変更があって初めて対応できそうです。
 また単に名前に#が入ったページext_linkの場合も手作業が必要。<汗>#をEUCコードの%23に置き換える必要が出てくる</汗>次期バージョンではIDでの認識になるようなのでこのあたりも問題はほとんど解決しそうですが。

 参照

通常のリンクでページ内アンカーに飛べるようになるパッチ - FreeStyleWikiext_link