Công cụ gỡ bỏ các thẻ HTML khỏi đoạn văn bản là gì?
Công cụ gỡ bỏ các thẻ HTML khỏi đoạn văn bản là tiện ích chuyển một đoạn HTML được nhập hoặc dán vào thành văn bản thuần. Thay vì giữ các dấu đánh dấu cấu trúc và định dạng, công cụ xử lý chúng để trả lại phần chữ phù hợp cho việc đọc, biên tập hoặc đưa vào nơi chỉ nhận văn bản.
Trong HTML, phần chữ, thẻ và thuộc tính là những thành phần khác nhau. Chẳng hạn, ở <a href="dia-chi">Đọc bài</a>, “Đọc bài” là nội dung chữ; phần bao quanh là thẻ liên kết; còn địa chỉ nằm trong thuộc tính. Công cụ có thể giữ phần chữ nhưng không xuất địa chỉ thuộc tính thành thông tin riêng. Vì vậy, kết quả không còn liên kết có thể nhấp, màu sắc hay kiểu chữ của bản gốc.
Công cụ xác nhận ba tùy chọn: giữ ngắt dòng từ các thẻ được hỗ trợ, giải mã thực thể ký tự HTML và dọn khoảng trắng. Cả ba đều bật mặc định. Kết quả xuất hiện trong ô chỉ đọc, tính trực tiếp khi gõ hoặc đổi tùy chọn, kèm dòng thống kê ký tự và thao tác sao chép dưới dạng văn bản thuần cùng nút tải .txt.
Tiện ích phù hợp với người đã có đoạn HTML và chỉ cần lấy chữ. Đây không phải công cụ tự lấy nội dung từ URL, không chuyển toàn bộ trang thành tài liệu giữ nguyên bố cục và không phải bộ bảo vệ chống mã độc. Một số nhóm thẻ còn bị bỏ cả nội dung, nên “xóa thẻ” không có nghĩa giữ lại mọi chữ trong đầu vào.

Các thuật ngữ cần hiểu khi xóa thẻ HTML
Thẻ HTML
Thẻ HTML là dấu đánh dấu cấu trúc hoặc ý nghĩa của nội dung, thường được viết giữa dấu nhỏ hơn và lớn hơn. Trong <strong>Quan trọng</strong>, hai thẻ bao quanh phần chữ “Quan trọng”. Thuộc tính nằm trong thẻ, không phải phần chữ hiển thị. Khi xử lý, công cụ thay hoặc loại bỏ thẻ; riêng một số nhóm đặc biệt có thể mất cả nội dung bên trong. Do đó, cần phân biệt bỏ dấu đánh dấu với giữ nguyên toàn bộ thông tin.
Văn bản thuần
Văn bản thuần là nội dung chữ không mang cấu trúc định dạng HTML. Nó vẫn có thể chứa tiếng Việt có dấu, ký tự Unicode, dấu cách và xuống dòng; không nhất thiết chỉ gồm ký tự ASCII hoặc nằm trên một dòng. Đây là dạng kết quả công cụ trả về. Điểm dễ nhầm là văn bản thuần vẫn có thể chứa chuỗi như <b> dưới dạng ký tự, nhưng chuỗi đó không tự trở thành định dạng trong ô kết quả.
Thực thể ký tự HTML
Thực thể ký tự HTML là cách biểu diễn ký tự bằng tên hoặc mã số, chẳng hạn & biểu diễn dấu &. Cách viết này giúp đưa những ký tự có ý nghĩa đặc biệt vào nội dung HTML. Tùy chọn giải mã của công cụ dùng bộ phân tích HTML của trình duyệt để lấy văn bản. Đây không phải giải mã dữ liệu được mã hóa bảo mật, không liên quan đến mật khẩu, và cũng không phải xác minh chữ ký.
Phần tử khối và phần tử nội tuyến
Trong kiến thức HTML thông thường, phần tử khối thường tạo vùng phân đoạn, còn phần tử nội tuyến thường tham gia dòng chữ, chẳng hạn đoạn văn và phần chữ nhấn mạnh. Tuy nhiên, cách hiển thị thực tế có thể thay đổi bằng CSS. Công cụ không đo bố cục đó: nó dùng danh sách thẻ cố định để tạo xuống dòng. Vì vậy, một phần tử được trình bày như khối trên trang chưa chắc tạo ngắt dòng trong kết quả lọc.
Khoảng trắng và ngắt dòng
Khoảng trắng gồm những ký tự tạo khoảng cách, như dấu cách, tab và xuống dòng. Các loại này không được xử lý giống nhau. Công cụ có quy tắc gộp dấu cách, giữ dấu tab phân cột trong bảng, đổi khoảng trắng không ngắt thành dấu cách và giảm chuỗi dòng trống, đồng thời luôn cắt khoảng trắng ở hai đầu toàn bộ kết quả. “Dọn khoảng trắng” không có nghĩa xóa mọi khoảng cách, biến mọi nội dung thành một dòng hoặc bảo toàn chính xác cách căn lề ban đầu.

Đầu vào, tùy chọn và ý nghĩa văn bản đầu ra
Dữ liệu nào có thể đưa vào?
Đầu vào là một chuỗi được nhập hoặc dán vào ô văn bản, thường là đoạn HTML. Văn bản không có thẻ cũng được tiếp nhận, nhưng vẫn có thể thay đổi do giải mã ký tự, dọn khoảng trắng và cắt khoảng trắng ở hai đầu. Chuỗi rỗng hoặc chỉ chứa khoảng trắng bị từ chối bằng thông báo yêu cầu nhập nội dung, đồng thời kết quả cũ bị xóa.
Công cụ không khai báo giới hạn số ký tự. Điều này không đồng nghĩa có thể xử lý đầu vào dài tùy ý: chưa có số liệu về giới hạn thực tế hoặc hiệu năng. Cũng không có chức năng nhận tệp đầu vào hay nhận URL để lấy mã trang.
Ba tùy chọn thay đổi điều gì?
- Giữ ngắt dòng: chuyển những thẻ phân đoạn được hỗ trợ thành ký tự xuống dòng, phù hợp khi cần nhận biết các phần của bài viết.
- Giải mã ký tự: chuyển biểu diễn thực thể HTML thành ký tự thông qua bộ phân tích HTML của trình duyệt.
- Dọn khoảng trắng: gộp một số chuỗi dấu cách, tab và dòng trống để nội dung gọn hơn.
Ba lựa chọn độc lập và đều bật mặc định. Muốn so sánh các cách xử lý, chỉ cần đổi lựa chọn: kết quả tính trực tiếp ngay khi gõ hoặc đổi tùy chọn, không cần nhấn nút lọc lại.
Kết quả giữ lại và bỏ đi những gì?
Kết quả nằm trong ô chỉ đọc, có thể chứa chữ, ký tự đặc biệt, dấu cách và xuống dòng. Các thuộc tính như đích liên kết hoặc mô tả ảnh không được trích thành văn bản riêng. Kiểu trình bày cũng không đi theo kết quả.
Một đầu vào hợp lệ vẫn có thể cho kết quả rỗng nếu toàn bộ nội dung bị loại bỏ. Thao tác sao chép dùng dạng text/plain; kết quả còn có nút tải .txt và dòng thống kê ký tự. Thao tác xóa làm trống cả hai ô ngay, không hỏi xác nhận. Nếu đầu vào rỗng bị từ chối, kết quả cũ bị xóa và thông báo hiển thị, nên không còn chuyện nhầm kết quả cũ với lần lọc mới.

Công cụ xử lý thẻ, ký tự và khoảng trắng như thế nào?
Thứ tự xử lý quyết định kết quả
Quy trình dùng trình phân tích HTML của trình duyệt để duyệt cây tài liệu: bỏ cả nội dung của các khối đặc biệt, sau đó chuyển các thẻ phân đoạn thành xuống dòng nếu được chọn; thẻ nội tuyến không thêm dấu cách. Tiếp theo mới đến giải mã thực thể, dọn khoảng trắng theo tùy chọn và cuối cùng cắt khoảng trắng ở hai đầu kết quả.
Các nhóm được xét để bỏ cả nội dung gồm script, style, noscript, iframe, svg, canvas, object, embed, applet và template, cùng tiêu đề trang, chú thích HTML và phần tử bị ẩn (thuộc tính hidden hoặc display:none). Vì dùng trình phân tích thật thay cho mẫu văn bản, thuộc tính chứa dấu lớn hơn hay cấu trúc lồng cũng được hiểu đúng như trình duyệt hiểu tài liệu.
Cách tạo xuống dòng và dấu cách
Khi giữ ngắt dòng, danh sách được hỗ trợ gồm br, hr, p, div, li, tr, các tiêu đề h1 đến h6, blockquote, article, section, header, footer, nav, aside, table, ul, ol, dl, dd và dt.
Mỗi ranh giới khối chỉ tạo một lần xuống dòng, không phải mỗi thẻ mở và thẻ đóng đều tạo một dòng riêng. Vì thế, hai đoạn nối tiếp chỉ cách nhau một lần xuống dòng; dòng trống chỉ còn khi nguồn vốn có dòng trống và tối đa một dòng trống. Việc nhận diện thẻ không phân biệt chữ hoa, chữ thường. Thẻ nội tuyến không thêm dấu cách, nên phần chữ vốn nằm sát nhau không còn bị tách ra; mục danh sách thành dòng bắt đầu bằng “- ”, hàng bảng thành một dòng với dấu tab giữa các ô.
Giải mã ký tự và dọn khoảng trắng
Giải mã do trình phân tích HTML thực hiện trong lúc phân tích: thực thể được đổi thành ký tự ngay khi đọc văn bản, và khi tắt tùy chọn giải mã thì các thực thể được giữ nguyên dạng mã. Đây không phải phép thay từng thực thể độc lập và không có vòng lặp giải mã nhiều lớp. Nếu thực thể tạo ra chuỗi giống thẻ, chuỗi đó nằm trong văn bản đầu ra và không bị lọc thêm lần nữa.
Dọn khoảng trắng đổi khoảng trắng không ngắt thành dấu cách, gộp dấu cách liên tiếp, giữ dấu tab phân cột trong bảng, xóa dấu cách và tab ở đầu và cuối mỗi dòng, rồi rút chuỗi từ ba lần xuống dòng trở lên về tối đa một dòng trống. Nó không gộp mọi loại khoảng trắng Unicode. Dù tắt tùy chọn này, khoảng trắng ở đầu và cuối toàn bộ kết quả vẫn bị cắt.

Ví dụ xóa thẻ HTML và cách đọc kết quả
Hai đoạn văn với hai cách giữ dòng
Các tình huống dưới đây là giả định được tính theo công cụ. Đầu vào và đầu ra đều là chuỗi văn bản, không có đơn vị đo. Xét hai đoạn liền nhau:
<p>Xin chào</p><p>Việt Nam</p>
Khi bật cả ba tùy chọn, mỗi ranh giới khối tạo một lần xuống dòng. Sau khi xử lý và cắt hai đầu, kết quả là:
Xin chào
Việt Nam
Không còn dòng trống giữa hai phần: mỗi ranh giới khối chỉ tạo một ký tự xuống dòng. Với cùng đầu vào, nếu tắt giữ ngắt dòng nhưng vẫn bật giải mã và dọn khoảng trắng, ranh giới khối được thay bằng dấu cách. Những dấu cách liên tiếp được gộp, cho kết quả:
Xin chào Việt Nam
Khác biệt nằm ở cách biểu diễn ranh giới đoạn, không phải ở phần chữ được giữ lại trong ví dụ này.
Nội dung bị loại bỏ và ký tự được giải mã
Giả sử đầu vào sau được xử lý với cả ba tùy chọn bật:
<div>A & B</div><script>Thông tin phụ</script>
Khối script bị loại bỏ cùng phần “Thông tin phụ”. Thẻ div tạo xuống dòng, còn thực thể biểu diễn dấu và được giải mã. Sau khi cắt khoảng trắng ở hai đầu, kết quả là:
A & B
Hai thay đổi có nguyên nhân khác nhau: nội dung khối đặc biệt bị loại bỏ ở bước đầu, còn dấu và xuất hiện do bước giải mã về sau.
Thẻ dạng thực thể và từ bị chia bởi thẻ
Với cả ba tùy chọn bật, chuỗi đầu vào <b>Chào</b> cho kết quả suy luận:
<b>Chào</b>
Ở bước loại bỏ thẻ, các dấu ngoặc mới chỉ tồn tại dưới dạng thực thể. Sau giải mã, chúng trở thành ký tự trong văn bản và không bị lọc thêm lần nữa. Kết quả vì thế có hình thức giống HTML dù nằm trong ô văn bản thuần.
Một trường hợp khác là đầu vào <span>Vi</span><span>ệt</span>, cũng bật cả ba tùy chọn. Thẻ nội tuyến không thêm dấu cách, nên hai phần chữ được ghép trực tiếp:
Việt
Trước đây mỗi thẻ được thay bằng dấu cách nên kết quả là “Vi ệt”; hành vi đó đã được sửa, nhưng với tên riêng hoặc thuật ngữ vẫn nên đối chiếu bản gốc khi tái sử dụng.

Giới hạn cần biết trước khi dùng kết quả
Không bảo toàn toàn bộ nội dung và bố cục
Việc tách thẻ dùng trình phân tích HTML của trình duyệt, nên HTML lỗi hoặc cấu trúc lồng phức tạp được xử lý theo cách trình duyệt hiểu tài liệu; dù vậy kết quả vẫn có thể khác phần nhìn thấy trên trang gốc.
Kết quả không giữ bố cục bảng, đích liên kết hay mô tả ảnh; các ô td và th được phân tách bằng dấu tab, còn mục danh sách thành dòng bắt đầu bằng “- ” và không giữ số thứ tự gốc của danh sách có thứ tự, nên đầu ra vẫn không phải CSV hoặc bảng căn chỉnh. Công cụ bỏ phần tử bị ẩn bằng thuộc tính hidden hoặc display:none, nhưng không tính các trạng thái ẩn khác theo CSS.
Không thay thế bước kiểm tra an toàn
Văn bản thuần không đồng nghĩa dữ liệu đã an toàn cho mọi cách sử dụng. Đặc biệt, giải mã có thể tạo chuỗi giống thẻ trong kết quả. Khi đưa nội dung sang một hệ thống khác, cần xử lý phù hợp với ngữ cảnh nơi nhận, không coi việc xóa thẻ là chứng nhận chống mã độc.
Với nội dung quan trọng, nên đối chiếu phần chữ, ranh giới đoạn và khoảng trắng với bản gốc. Các từ bị tách hoặc đoạn bị loại bỏ có thể làm thay đổi ý nghĩa.
Những hành vi chưa thể cam kết
Chưa có căn cứ xác nhận dung lượng tối đa, tốc độ xử lý hay khả năng tương thích trên mọi trình duyệt. Công cụ cũng không đủ để kết luận toàn trang không lưu, theo dõi hoặc truyền dữ liệu. Tránh đưa thông tin nhạy cảm vào khi chưa rõ chính sách của nơi triển khai.
Khả năng sao chép phụ thuộc trình duyệt và môi trường sử dụng. Thông báo sao chép thành công chỉ hiện khi thao tác sao chép báo thành công; nếu sao chép thất bại, công cụ báo lỗi rõ thay vì báo thành công.

Khi nào nên chuyển HTML thành văn bản thuần?
Chuẩn bị nội dung cho nơi chỉ nhận văn bản
Công cụ phù hợp khi bạn đã có đoạn HTML và muốn lấy chữ để đưa vào ghi chú, bản nháp hoặc ô nhập chỉ nhận văn bản. Nó cũng hữu ích khi cần đọc lại nội dung mà không quan tâm màu sắc, kiểu chữ hay liên kết của bản gốc.
Với bài viết nhiều phần, giữ ngắt dòng giúp ranh giới đoạn dễ nhận biết hơn. Nếu muốn chuỗi ngắn gọn, có thể tắt tùy chọn này và bật dọn khoảng trắng. Tuy nhiên, tắt giữ ngắt dòng chỉ ngăn việc tạo dòng từ thẻ; nó không bảo đảm đầu ra một dòng nếu đầu vào vốn có ký tự xuống dòng.
Văn bản sau lọc cũng có thể được chuẩn bị thủ công cho nhu cầu đọc thành tiếng ở nơi khác. Đây là cách tái sử dụng kết quả, không phải chức năng đọc thành tiếng được xác nhận của công cụ.
Kiểm tra lại trước khi tái sử dụng
Trước khi dùng cho nội dung quan trọng, hãy kiểm tra tên riêng, từ bị chia bởi thẻ, dấu câu và ranh giới đoạn. Nếu bản gốc có bảng hoặc danh sách đánh số, cần xem việc mất cấu trúc có khiến các mục trở nên khó hiểu không.
Bạn có thể đối chiếu thủ công hoặc tham khảo công cụ so sánh văn bản trong quy trình kiểm tra riêng; không có bằng chứng hai công cụ tự tích hợp. Nếu cần giữ địa chỉ liên kết, mô tả ảnh hay cột bảng, việc chỉ lấy văn bản thuần chưa đáp ứng đầy đủ nhu cầu đó.

Xóa thẻ HTML khác gì giải mã thực thể và làm sạch văn bản?
Xóa thẻ HTML nhằm bỏ dấu đánh dấu cấu trúc để lấy chữ. Giải mã thực thể nhằm đổi cách biểu diễn ký tự sang ký tự tương ứng. Làm sạch văn bản thường nhằm chuẩn hóa khoảng trắng hoặc cách trình bày chữ. Ba mục tiêu khác nhau dù có thể xuất hiện trong cùng một quy trình.
Một đoạn không có thẻ vẫn có thể chứa thực thể cần giải mã. Ngược lại, đoạn có nhiều thẻ nhưng không có thực thể vẫn cần bỏ thẻ nếu chỉ muốn lấy chữ. Sau hai thao tác đó, nội dung có thể còn khoảng cách thừa cần dọn. Không nên dùng một thao tác như sự thay thế mặc nhiên cho hai thao tác còn lại.
Nếu quan tâm riêng đến cách biểu diễn ký tự, chủ đề escape và unescape ký tự HTML là hướng tham khảo liên quan. Với nhu cầu chỉnh nội dung đã là văn bản, có thể tham khảo làm sạch và định dạng văn bản thô. Các liên kết này định hướng chủ đề, không xác nhận chế độ hay khả năng tích hợp của công cụ khác.
Cũng cần phân biệt xóa thẻ với làm sạch HTML theo danh sách cho phép. Về khái niệm, cách thứ hai có thể giữ lại một phần cấu trúc HTML được chấp nhận, trong khi công cụ đang xét hướng đến văn bản thuần. Hai cách phục vụ mục đích khác nhau và không thể đánh đồng về bảo toàn định dạng hoặc an toàn dữ liệu.

Câu hỏi thường gặp
Vì sao nhập HTML có nội dung nhưng kết quả lại rỗng?
Kết quả có thể rỗng nếu nội dung nằm hoàn toàn trong khối bị loại bỏ, chẳng hạn một khối script, hoặc đầu vào chỉ còn thẻ và khoảng trắng sau xử lý. Phần chữ nằm trong thuộc tính cũng không được trích riêng. Vì vậy, “có nội dung trong mã” chưa chắc là “có phần chữ được giữ lại”. Nên xem vị trí nội dung cần lấy. Đầu vào rỗng bị từ chối sẽ xóa kết quả cũ và hiển thị thông báo, nên không còn chuyện nhầm kết quả cũ với lần lọc mới; đầu vào chỉ còn thẻ cũng cho kết quả rỗng kèm thông báo và tắt nút sao chép/tải.
Vì sao bật giữ ngắt dòng lại xuất hiện dòng trống?
Dòng trống chỉ xuất hiện khi nguồn vốn có dòng trống (ví dụ nhiều lần xuống dòng liên tiếp giữa hai đoạn) hoặc nhiều thẻ br liên tiếp; mỗi ranh giới khối chỉ tạo một lần xuống dòng. Tùy chọn dọn khoảng trắng rút chuỗi từ ba lần xuống dòng trở lên về tối đa một dòng trống. Vì thế, giữ ngắt dòng nên được hiểu là tạo ranh giới văn bản, không phải sao chép chính xác bố cục trang.
Vì sao một từ bị thêm dấu cách sau khi bỏ thẻ?
Không còn: thẻ nội tuyến không thêm dấu cách, nên hai phần chữ nằm sát nhau được ghép trực tiếp (ví dụ hai thẻ span chứa “Vi” và “ệt” cho “Việt”). Nếu vẫn thấy dấu cách giữa từ, nguyên nhân nằm ở dấu cách vốn có trong nguồn, chứ không phải do thẻ chèn thêm; với tên riêng hoặc thuật ngữ vẫn nên đối chiếu bản gốc.
Vì sao kết quả vẫn còn chuỗi giống thẻ HTML?
Chuỗi giống thẻ có thể được tạo ra ở bước giải mã thực thể, vốn do trình phân tích HTML thực hiện trong lúc phân tích. Những dấu ngoặc được viết dưới dạng thực thể chưa phải thẻ thực tại thời điểm lọc; sau giải mã, chúng trở thành ký tự trong đầu ra. Công cụ không lọc lại thẻ sau bước đó. Trong ô kết quả, chúng là văn bản, nhưng nếu chuyển sang nơi diễn giải HTML, cần xử lý theo ngữ cảnh chứ không mặc nhiên coi chúng an toàn.
Công cụ có giữ địa chỉ liên kết và mô tả ảnh không?
Không có chức năng xuất riêng địa chỉ liên kết hay mô tả ảnh từ thuộc tính HTML trong công cụ. Phần chữ nằm giữa thẻ liên kết có thể được giữ, nhưng địa chỉ bên trong thẻ không đi theo thành một trường riêng. Tương tự, mô tả ảnh trong thuộc tính không được chuyển thành câu chữ. Nếu những thông tin đó quan trọng, cần ghi nhận từ bản gốc; không nên kỳ vọng bản văn thuần chứa đầy đủ mọi thông tin của đoạn HTML.
Có thể dán URL để công cụ tự lấy nội dung trang không?
Không, Công cụ chỉ nhận chuỗi trong ô nhập và không có chức năng tải nội dung từ địa chỉ trang web. Nếu dán URL, nó được xử lý như văn bản đầu vào chứ không phải yêu cầu truy cập trang. Muốn lọc HTML, bạn cần có sẵn đoạn HTML phù hợp để nhập. Ngay cả khi có toàn bộ mã trang, kết quả cũng không được bảo đảm giống phần nhìn thấy trên trình duyệt vì công cụ không tính bố cục và chỉ bỏ trạng thái ẩn bằng thuộc tính hidden hoặc display:none.
Thông báo đã copy có bảo đảm văn bản đã vào bộ nhớ tạm không?
Thông báo thành công chỉ hiện khi thao tác sao chép báo thành công; nếu sao chép thất bại, công cụ báo lỗi rõ thay vì báo thành công. Hành vi vẫn phụ thuộc trình duyệt và môi trường sử dụng, nên cách kiểm tra thực tế vẫn là dán vào nơi nhận rồi đối chiếu nội dung. Nếu kết quả rỗng, nút sao chép bị mờ nên không thực hiện thao tác sao chép.
