piapia123
ja

HTML から Markdown へ

テキスト

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

HTML の断片を Markdown に変換します。見出し、段落、太字と斜体、リンクと画像、引用、順序付き・順序なしリスト(入れ子も)、言語を class から取るコードフェンス、GFM のパイプ表に対応しています —— Web ページやリッチテキストエディタ、Markdown エディタからコピーした内容をそのまま貼れます。特に 3 点:本文中で Markdown の構文と衝突する文字はエスケープします(そうしないと `*` を含む行が斜体として解釈され、利用者から見ると「出力がなぜか別物になった」としか見えません)。コードフェンスは内容中のバッククォートに合わせて自動で長くなります(内容に三連バッククォートがあるとブロックが途中で閉じ、以降が本文として表示されます)。`javascript:` などの URL はリンクにしません —— 出力は自分のブログに貼るものなので、クリック可能な XSS の入口をこのツールが作るべきではありません。

機能

  • 見出し、段落、太字、斜体、打ち消し線、インラインコード、リンク、画像
  • 順序付き・順序なしリスト(入れ子対応、マーカー幅でインデント)。</li> を省略した書き方も認識します
  • コードフェンス。言語は class="language-xxx" または "lang-xxx" から取得
  • GFM のパイプ表。足りないセルは空で埋め、セル内の縦線はエスケープ
  • 引用、水平線、強制改行
  • 本文中の Markdown 記号をエスケープし、書式として解釈されないようにする
  • コードフェンスは内容のバッククォートに応じて自動で長くなる
  • javascript: や data: の URL はリンクにしない
  • script と style はまるごと破棄し、出力に混入させない
  • 未知のタグは文字を残してタグを捨てるので、出力に 2 つの記法が混ざりません
  • リッチテキストエディタ(UEditor、CKEditor、TinyMCE)が出力したインライン style 付きの断片もそのまま貼れます
  • 処理はすべてブラウザ内で完結し、内容は送信されません

使い方

  1. HTML を貼り付ける
  2. 詰めて表示したいときは「段落の間に空行」をオフにする
  3. 結果をコピーして、ブログ・Issue・ドキュメント・README に貼る

よくある質問

本文中のアスタリスクが \* になったのはなぜですか?
Markdown が `*` を斜体の開始として読むからです。`a*b*c` を含む行をそのまま出力すると、`a` + 斜体の `b` + `c` として描画されます —— 利用者から見ると「出力がなぜか別物になった」だけです。`a\*b\*c` とエスケープすれば、元の文字のまま表示されます。バッククォート、アンダースコア、角括弧、山括弧も同様です。`#` と `-` は意図的にそのままにしています —— これらは行頭でのみ意味を持ち、どこでもエスケープすると出力がバックスラッシュだらけになります(`C#` が `C\#` になります)。
コードブロックの言語はどこから来ますか?
`<pre><code class="language-js">` の class から取ります。`language-` と `lang-` の両方の接頭辞を認識します(前者は GitHub と highlight.js、後者は Prism の書き方です)。無い場合は言語なしのフェンスを出力します。またフェンスの長さは内容に応じて自動で伸びます —— 三連バッククォートを含む場合は 4 つで囲みます。そうしないとその行でコードブロックが閉じ、以降がすべて本文になってしまいます。
リンクがただの文字になったのはなぜですか?
`javascript:` や `data:` などのスキームを使っているためです。これらが通常の文章に出てくる理由はほとんどなく、出力は自分のブログや Issue に貼るものです —— `[こちら](javascript:...)` を貼れば、それはクリック可能な XSS の入口になります。このツールは http、https、ftp、mailto、tel などの通常のスキームのみ通し、それ以外は文字だけを残します。
表に見出し行が増えるのはなぜですか?
Markdown の表には見出し行が必須だからです —— 見出しのない行をパイプ記法で表す方法はありません。そのため元の表がすべて `<td>` でも、1 行目が見出しになります。足りないセルは空で埋め、セル内の縦線は `\|` にエスケープします(しないとそのセルが表を分断します)。
UEditor などが出力した内容も変換できますか?
できます。エディタの出力は通常、大量のインライン style(`text-indent`、`font-family`、`text-align`)と何層もの `<div>`/`<span>` を伴います。このツールはスタイルを捨てて文字を残します —— これらのスタイルに Markdown の対応物はなく、インライン HTML に押し込むと出力が読めなくなるからです。これは意図的な割り切りです:元のスタイルをまとった HTML ではなく、きれいな文字を得る。
内容は送信されますか?
いいえ。変換はすべてブラウザのメモリ上で行われ、ページは一切リクエストを送りません。オフラインでも動作します。

関連ツール