HTML → Markdown 변환기

브라우저에서 HTML을 Markdown으로 즉시 변환. 제목·굵게·기울임·링크·이미지·코드 블록(언어 보존)·GFM 표·중첩 목록 지원. 무료, 업로드 불필요.

  • 브라우저에서 처리
  • 데이터가 브라우저 밖으로 나가지 않습니다
  • 무료 · 회원가입 불필요
제목, 링크, 코드, 목록, 표, 인용문이 있는 예시를 불러옵니다. 현재 HTML을 바꾸고 즉시 변환합니다.
두 입력란, 경고, 복사 피드백을 지우고 대기 중인 변환을 취소합니다. 도구 안에 포커스가 있으면 Ctrl/⌘+L로도 지울 수 있습니다.
전체 Markdown 출력을 UTF-8 파일 output.md로 저장합니다. 출력이 비어 있으면 다운로드하지 않습니다.
전체 Markdown 출력을 텍스트로 복사합니다. 출력이 비어 있으면 복사하지 않습니다.
HTML을 입력하거나 붙여 넣으세요. 입력을 멈춘 뒤 300 ms 후 변환합니다. 1,048,576자를 초과하면 경고를 표시하며 변환은 계속합니다.
Markdown 출력 제목은 ATX 구문을 사용하고 코드 블록은 언어를 유지합니다. 표의 첫 행이 THEAD 안에 있으면 GFM으로 변환하고, 뒤쪽 행에만 TH가 있으면 HTML을 유지합니다. 게시 전에 Markdown을 확인하세요.

변환된 Markdown이 여기에 표시됩니다.

예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.

예시: 병합된 머리글이 있는 운행표

아래 출력은 모두 이 도구의 변환기(Turndown 7.2.4와 turndown-plugin-gfm 1.0.2의 표 규칙)로 계산한 결과입니다.

시간표처럼 머리글 한 칸이 아래 두 칸을 덮는 표는 HTML에서 colspan으로 만듭니다.

<table><thead><tr><th>노선</th><th colspan="2">운행</th></tr></thead><tbody><tr><td>서울–부산</td><td>매일</td><td>05:30</td></tr></tbody></table>

변환 결과:

| 노선 | 운행 |
| --- | --- |
| 서울–부산 | 매일 | 05:30 |

GFM 표에는 셀 병합이 없어서 colspan은 무시되고, 머리글은 2칸, 본문은 3칸이 됩니다. GFM 사양은 머리글보다 칸이 많은 행의 남는 칸을 버린다고 정하고 있어(GFM 사양, 표 확장), 이 사이트의 Markdown 미리보기에서도 05:30 칸이 보이지 않습니다. 이런 표는 변환한 뒤 머리글 행을 | 노선 | 운행 | 첫차 |처럼, 구분 행을 | --- | --- | --- |처럼 3칸으로 직접 고쳐야 합니다.

티스토리 글의 코드 블록을 옮길 때

티스토리 새 에디터 FAQ는 “마크다운 문법은 Github Flavor Markdown (GFM)을 기본으로 지원합니다”라고 안내합니다(티스토리 공지). 그런데 이미 게시된 글의 HTML을 Markdown으로 되돌리면 코드 블록의 언어 이름이 빠질 수 있습니다. 티스토리 공식 글쓰기 가이드: 마크다운 문법 페이지의 HTML을 2026-10-08에 확인해 보니, 코드 블록이 아래처럼 언어 이름을 pre의 class에 담고 있었습니다.

<pre class="markdown"><code>&gt; 인용문입니다.
&gt;
&gt; 인용문 안에서도 새로운 문단을 사용할 수 있고</code></pre>

변환 결과에는 언어 이름이 없습니다.

```
> 인용문입니다.
>
> 인용문 안에서도 새로운 문단을 사용할 수 있고
```

이 도구는 <code> 요소의 language- 클래스에서만 언어 이름을 읽기 때문입니다. 코드 내용과 줄바꿈은 그대로 남으므로, 여는 펜스 뒤에 markdown처럼 언어 이름을 직접 적어 주면 됩니다.

같은 내용을 <pre><code class="language-markdown">&gt; 인용문입니다.</code></pre>로 쓰면 다음과 같이 언어 이름이 붙습니다.

```markdown
> 인용문입니다.
```

한국어에서 굵게가 풀리는 경우

<p><strong>중요!</strong>합니다</p>는 **중요!**합니다로 변환됩니다. 이 Markdown을 이 사이트의 Markdown 미리보기(micromark와 GFM 확장)에 붙여 넣으면 굵게 표시되지 않고 **가 그대로 보입니다. CommonMark 규칙에서 닫는 **는 바로 앞이 문장 부호이면 바로 뒤가 공백이나 문장 부호여야 하는데(CommonMark 0.31.2 §6.2), 여기서는 ! 바로 뒤에 합니다가 공백 없이 붙어 있습니다. GitHub에서 확인한 결과는 마크다운 문법 정리에 정리해 두었습니다.

문장 부호를 굵게 밖으로 빼서 <p><strong>중요</strong>!합니다</p>로 바꾸면 출력은 **중요**!합니다가 되고 미리보기에서도 굵게 표시됩니다. 변환기가 이렇게 고쳐 주지는 않으므로 HTML이나 변환된 Markdown을 직접 고쳐야 합니다.

페이지 전체를 붙여 넣으면

<html><head><title>공지사항</title></head><body><h1>점검 안내</h1><p>10월 9일 02:00–04:00</p></body></html>처럼 문서 전체를 넣으면 title의 텍스트가 본문 맨 앞에 붙습니다.

공지사항

# 점검 안내

10월 9일 02:00–04:00

<style>과 <script> 안의 텍스트도 같은 방식으로 남습니다. 필요한 본문 요소만 복사해서 넣으세요.

변환 참조표

HTMLMarkdown
<h1>제목</h1># 제목
<strong>텍스트</strong>**텍스트**
<em>텍스트</em>*텍스트*
<a href=“url”>링크</a>[링크](url)
<img src=“url” alt=“설명”>![설명](url)
<pre><code class=“language-js”>```js 펜스 블록
<table>GFM 파이프 표
<blockquote>> 인용
<hr>* * *
<br>줄 끝 공백 두 개와 줄바꿈

제한 사항

  • 취소선(<del>, <s>), 형광펜(<mark>), 작업 목록의 체크박스는 변환하지 않고 글자만 남깁니다.
  • 표의 colspan과 rowspan은 무시합니다. GFM 표에는 셀 병합이 없습니다.
  • src 속성이 없는 <img>는 흔적 없이 사라집니다. 이미지를 지연 로딩하는 페이지는 화면에 보이기 전까지 주소를 data-src에 두는 경우가 많으므로, 이미지가 불러와진 뒤에 복사하거나 속성 이름을 src로 바꾼 뒤 변환하세요.
  • 코드 언어 이름은 <code>의 language- 클래스에서만 읽습니다. <pre>의 클래스나 data-lang 속성에 있는 언어 이름은 쓰이지 않습니다.
  • 상대 경로 링크와 이미지는 그대로 남고, 게시한 페이지의 주소를 기준으로 해석됩니다.
  • 입력이 1,048,576자를 넘으면 “입력이 매우 크면 변환이 느릴 수 있습니다.”가 표시되지만 변환은 페이지 안에서 계속됩니다.
  • 이 사이트의 Markdown 미리보기는 원시 HTML을 글자로 보여 줍니다. 표 셀 안의 <br>이나 HTML로 남은 표는 미리보기에서 태그가 그대로 보입니다.

FAQ

지원하는 HTML 요소는 무엇인가요?

자주 쓰는 요소는 변환됩니다. h1–h6, p, strong/b, em/i, a, img, code, pre+code(언어 클래스를 읽음), ul, ol, li, blockquote, hr, table(GFM 형식), br입니다. del, s, mark, 폼 요소 같은 나머지 요소는 안의 텍스트만 남습니다.

코드 블록은 어떻게 처리되나요?

인라인 <code>는 백틱으로 감싼 코드가 됩니다. <pre><code class="language-javascript">는 언어 이름이 붙은 펜스 ```javascript가 됩니다. 언어 이름은 <code> 요소의 language-* 클래스에서만 읽으므로, 이 클래스가 없으면 언어 이름 없는 ``` 펜스가 됩니다.

GFM 표를 지원하나요?

네. 첫 행이 thead 안에 있거나 첫 행의 셀이 모두 th이면 구분 행이 있는 GitHub Flavored Markdown(GFM) 파이프 표로 변환됩니다. 셀 안의 | 는 \| 로, <br> 은 <br> 그대로 출력합니다. 그 밖의 표는 HTML 그대로 출력합니다(GFM 표에는 머리글 행이 필요하기 때문).

잘못되었거나 닫히지 않은 HTML은 어떻게 되나요?

브라우저에 내장된 HTML 파서로 읽기 때문에 브라우저가 페이지를 표시할 때와 같은 방식으로 보정됩니다. 보정할 수 있는 부분은 보정한 뒤 변환하므로 예상과 다른 결과가 나올 수 있습니다. 예를 들어 닫히지 않은 <b>는 다음 단락까지 굵게 만듭니다.

웹 페이지 전체를 변환할 수 있나요?

할 수 있지만 필요 없는 부분은 먼저 지우세요. <script>, <style>, <title>을 지우는 규칙이 없어서 그 안의 텍스트도 Markdown에 나옵니다. 브라우저 개발자 도구의 요소 패널에서 본문을 감싼 요소의 outerHTML만 복사하는 편이 좋습니다.

HTML이 서버로 전송되나요?

아니요. 페이지는 브라우저 안의 Turndown 라이브러리로 HTML을 변환하며, 어디에도 보내지 않고 브라우저 저장소에도 저장하지 않습니다. 페이지 통계는 입력을 고친 뒤 포커스를 옮길 때와 예시를 누를 때 사용 이벤트(도구 이름과 동작 convert)만 기록하며, HTML이나 Markdown 내용은 포함하지 않습니다.