Bộ chuyển đổi BBCode sang HTML

BBCode là kiểu markup nhẹ của thời kỳ forum, [b]bold[/b], [url], [quote], [code]. phpBB, vBulletin, XenForo và SMF đều từng dùng nó, và hàng triệu bài viết trên các nền tảng đó vẫn còn tồn tại. Bộ chuyển đổi này phân tích BBCode và xuất HTML sạch, hợp lệ để bạn dán vào CMS hiện đại, site tĩnh hoặc pipeline Markdown-to-HTML không hiểu các thẻ forum.

Cách chuyển đổi BBCode

  1. 1

    Dán BBCode của bạn

    Bài viết đầy đủ hoặc đoạn ngắn đều được. Thẻ lồng nhau được xử lý.

  2. 2

    Parser tách token thẻ mở và thẻ đóng

    Các cặp `[tag]...[/tag]` khớp nhau sẽ tạo phần tử HTML tương ứng.

  3. 3

    Thuộc tính thẻ được ánh xạ

    Những dạng như `[color=red]`, `[size=18]` hoặc `[url=https://...]` trở thành inline style hoặc thuộc tính `href`.

  4. 4

    Sao chép HTML

    Sẵn sàng cho bài blog, trang tài liệu hoặc quá trình migrate diễn đàn.

Thẻ được hỗ trợ

BBCode HTML đầu ra
[b]text[/b] <strong>text</strong>
[i]text[/i] <em>text</em>
[u]text[/u] <u>text</u>
[s]text[/s] <del>text</del>
[url]link[/url] <a href="link">link</a>
[url=link]text[/url] <a href="link">text</a>
[img]link[/img] <img src="link">
[quote]q[/quote] <blockquote>q</blockquote>
[code]c[/code] <pre><code>c</code></pre>
[list][*]a[*]b[/list] <ul><li>a</li><li>b</li></ul>
[color=red]t[/color] <span style="color:red">t</span>
[size=18]t[/size] <span style="font-size:18px">t</span>

Ghi chú bảo mật

BBCode được thiết kế để an toàn; HTML thì không. Chuyển BBCode do người dùng gửi thành HTML chính là thời điểm kinh điển khiến một diễn đàn đưa XSS vào hệ thống năm 2005. Nếu bạn xuất bản đầu ra đã chuyển đổi:

  • Thoát (escape) mọi văn bản thô bên trong thẻ BBCode.
  • Chỉ cho phép các thẻ mà bộ chuyển đổi phát ra, đừng chuyển tiếp thẻ không xác định như HTML thô.
  • Kiểm tra URL trong [url][img] để chặn scheme javascript:data:.

Công cụ này không viết lại URL bạn cung cấp, vì vậy hãy kiểm tra chúng trước khi xuất bản đầu ra đã chuyển đổi.

Migrate cả một diễn đàn

Khi di chuyển hàng nghìn bài viết, hãy chạy bộ chuyển đổi như một quy trình xử lý: xuất bài viết dạng BBCode → chạy qua bộ chuyển đổi này → nhập HTML. Kiểm tra ngẫu nhiên vài chục bài có lồng thẻ bất thường hoặc mã emoji tùy biến có thể không nằm trong bộ thẻ chuẩn.

Những gì BBCode không ánh xạ sạch sang HTML

  • Smilies tùy chỉnh của forum (:D:)), giữ nguyên rồi render bằng CSS, hoặc tiền xử lý riêng.
  • Thẻ riêng của plugin (như [spoiler], [youtube]) không được nhận diện, nên sẽ được xuất thành văn bản nguyên dạng.
  • Thẻ chưa đóng sẽ giữ nguyên dạng văn bản: parser không cố đóng hay sửa chúng.

Câu hỏi thường gặp

Có: bài viết cộng đồng Steam, các diễn đàn vBulletin và XenForo, một số wiki và nhiều bản cài phpBB cũ. Nó cũng còn tồn tại như markup nền trong một số panel quản trị game server.

Không phải công cụ này, hãy dùng bộ chuyển HTML sang BBCode. Chuyển ngược thường mất mát hơn vì HTML biểu đạt phong phú hơn BBCode nhiều.

Thẻ không xác định đi qua như văn bản nguyên dạng, vì bộ chuyển đổi chỉ nhận diện những thẻ được liệt kê trong bảng ở trên.

Việc lồng hoạt động khi các thẻ khác nhau, ví dụ [b] bên trong [quote]. Một thẻ lồng bên trong chính nó, như trích dẫn trong trích dẫn, sẽ bị đóng ở thẻ đóng đầu tiên và phần còn lại giữ nguyên dạng văn bản, vì vậy hãy làm phẳng những bài như vậy trước khi chuyển đổi.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác