MarkdownでURLを自動リンクしない(+ RFC 7763を詳しく調べてみた)

はじめに

Markdownで httphttps から始まる文字列は自動リンクになることが多いです。

でも、時には自動リンクにしてほしくないときもあるでしょう。

気になって

markdown http リンクにしない

で検索したら、上位3件がそれぞれ全く違う方法でした。

方法1: バックスラッシュによるエスケープ

: (コロン)前にバックスラッシュをつけると:

http\://qiita.com/k_ui

こんな感じでリンクされない:

http://qiita.com/k_ui

出典: URL を自動リンクさせない - Qiita

方法2: バック・クォート(`)で囲む

`http://www.mywebaddress.com`

出典: MarkdownでURLをリンクにしない - ええやんブログ

方法3: 特殊文字を使う

http://www.example.com

出典: GitHub Flavored Markdown でURLの自動リンクをしないようにする - ObjecTips

実行結果

とりあえず以上が上位3件の方法です。

実際、gulp-postmanなどで用いられているNode製マークダウンパーサーのmarkedで試してみたところ、方法3で無事所望の結果が得られました。
ただし、markedではHTML出力としてはコロンが特殊文字のまま出力されたので、実用的ではありながらも完璧ではありませんでした。
方法2は自動リンクには避けられましたが、 <code></code> で囲まれてしまいます。

ちなみに、調べている過程でBabelmark 2という便利ツールを見つけたのでこれを使えば一目瞭然でした。

出典: Standard MarkdownがCommon Markdow、そしてCommonMarkに - InfoQ

方法1: http\://butchi.jp/
http://johnmacfarlane.net/babelmark2/?text=http%5C%3A%2F%2Fbutchi.jp%2F)

方法2: http://butchi.jp/
http://johnmacfarlane.net/babelmark2/?text=%60http%3A%2F%2Fbutchi.jp%2F%60

方法3: http&#58;//butchi.jp/
http://johnmacfarlane.net/babelmark2/?text=http%26%2358%3B%2F%2Fbutchi.jp%2F

他の方法

http[]()://localhost/

出典: MarkdownでURLからハイパーリンクを回避したい(方法だけ) - by shigemk2

確かに自動リンクは避けられましたが、案の定

http<a href=""></a>://localhost/

と空のa要素が生成されます。

他にもいい方法がないか調べたり考えたりしましたが残念ながら見つかりませんでした。

RFC 7763

ちなみにMarkdownは紆余曲折がありながらもようやく標準化の波に乗ってきてるようで、RFC 7763で文書化されていますが、ざっと見たところ(あとでちゃんと読む)そもそも自動リンクの仕様自体見つからず、よって避ける方法も明記されていません。

最後に

結論、実用的な自動リンク回避方法は

http&#58;//butchi.jp/

のような書き方ですが、

http://butchi.jp/

のままHTML出力する方法は恐らく存在しません。

Markdownのような直感的によしなに軽量マークアップや自動変換をするシステムは、お節介が高じて単純なものすら容易に記述できないことがしばしばです。(チャットツールでよくある、コードの一部が絵文字に変換される、など。)
思いつきで作られた実用ベースの不完全な言語は、時として不自由もあると理解した上で割り切って使う必要がありますね。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.