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 付きの断片もそのまま貼れます
- 処理はすべてブラウザ内で完結し、内容は送信されません
使い方
- HTML を貼り付ける
- 詰めて表示したいときは「段落の間に空行」をオフにする
- 結果をコピーして、ブログ・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 ではなく、きれいな文字を得る。
- 内容は送信されますか?
- いいえ。変換はすべてブラウザのメモリ上で行われ、ページは一切リクエストを送りません。オフラインでも動作します。
関連ツール
Markdown プレビュー
テキスト左に Markdown を書くと右にリアルタイム描画。見出しにはアンカーと目次が付き、コードブロックは色分けしてコピーできます。貼り付けた HTML は文字のまま。
HTML 整形
整形HTML をオンラインで整形・圧縮:タグの階層ごとにインデントし、テキストとインライン要素は同じ行のまま。script と pre の中身はそのまま保持します。
表の変換
テキストCSV・TSV・Markdown の表を相互変換:Markdown 表、ASCII 罫線表、HTML、JSON、CSV。引用符は RFC 4180 に沿って処理し、列幅は表示幅で揃えます。
テキスト整形
テキストログや表からコピーした1列を整形します。重複行の削除、並べ替え、空行・前後の空白・行番号の削除、空白のまとめを個別に切り替えできます。
テキスト差分
テキスト2つのテキストを行ごとに比較し、追加・削除・未変更の行をハイライト表示します。変更は最小差分で整列し、すべてブラウザ内で処理します。
文字数カウント
テキスト英語は単語数、日本語や中国語は字数で別々に数えます。文字数・行数・バイト数・読了時間も同時に出し、すべてブラウザ内で処理するので送信しません。