entities.confの落とし穴

[ Category : DokuWiki ] 2010年01月13日 13:53
 DokuWikiは、極力HTMLタグを使わずに高速で文章が書けるようになっていますが、デフォルトでは文字色を変えたり、右寄せやセンタリングができません。そういう機能を追加した場合は、conf/entities.confを編集したらOKです。デフォルトでは、次のようになっています。

# Typography replacements
#
# Order does matter!
#
# You can use HTML entities here, but it is not recomended because it may break
# non-HTML renderers. Use UTF-8 chars directly instead.
 
<->     ↔
->      →
<-      ←
<=>     ⇔
=>      ⇒
<=      ⇐
>>      »
<<      «
---     —
--      –
(c)     ©
(tm)    ™
(r)     ®
...     …

 書式は単純。「変換したい文字列(半角スペースを好きなだけ)変換後の文字列」という風に、1行に書けばOKです。では、これに、次のような行を追加してみました。

[red]		<span style='color:#d3381c;'>
[blue]	<span style='color:#2a83a2;'>
[green]	<span style='color:#47885e;'>
[/red]	</span>
[/blue]	</span>
[/green]	</span>

 狙いは「[red]赤色にしたい文字列[/red]」を「<span style='color:#d3381c;'>赤色にしたい文字列</span>」に変換させたいわけですね! でも、コレを実践するとページの表示が崩れてしまいました…。んでもってよく見ると…

You can use HTML entities here, but it is not recomended because it may break
(ココでHTMLタグを使うこともできるんだけどさ、おすすめできないんだ。バグっちゃうかもしんないよ

なんて記載がentities.confのヘッダに書いてあるじゃないですか。ありゃりゃ…、以前のバージョンならできたのに、どうも、2009-12-25版ではできなくなってしまったようですね…。

 さてさて、吐き出されたHTMLコードをよく見ると「color:#」の「#」を表示する時におかしな挙動をするっぽいということが判明。こういう時の対処法は「エスケープのおまじない」ですよね!試しに#の直前にエスケーブを入れてみたところ、ちゃんと動くようになりました。

[red]		<span style='color:\#d3381c;'>
[blue]	<span style='color:\#2a83a2;'>
[green]	<span style='color:\#769164;'>
[/red]	</span>
[/blue]	</span>
[/green]	</span>

Discussion