HTML Escape is the process of converting special HTML characters (like <, >, &, ") into HTML entities (like <, >, &, ").
Unescape is the reverse process, converting HTML entities back to their original characters.
Why Do We Need HTML Escaping?
- Prevent XSS (Cross-Site Scripting): Escaping is the first line of defense against XSS attacks. It prevents malicious HTML/JavaScript injection and is essential when displaying user-generated content.
- Display HTML Code as Text: Show HTML examples in documentation, render code snippets on web pages, or debug template engines.
- Data Serialization: Safely embed HTML in JSON/XML, prepare content for API responses, or store HTML in databases.
- Email & Header Safety: Escape special characters in email subjects, prepare data for HTTP headers, or handle form data correctly.
Entity Format Comparison
| Character | Named Entity | Decimal Entity | Hex Entity |
|---|---|---|---|
| < | < | < | < |
| > | > | > | > |
| & | & | & | & |
| " | " | " | " |
| ' | ' | ' | ' |
Code Examples
JavaScript (Browser)
// Escape HTML
function escapeHtml(text) {
const map = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
return text.replace(/[&<>"']/g, m => map[m]);
}
// Unescape HTML
function unescapeHtml(html) {
const doc = new DOMParser().parseFromString(html, 'text/html');
return doc.documentElement.textContent;
}
// Usage
const escaped = escapeHtml('<script>alert("XSS")</script>');
console.log(escaped);
// <script>alert("XSS")</script>Node.js (using 'he' library)
const he = require('he');
// Encode
const encoded = he.encode('<div class="test">Hello & goodbye</div>');
console.log(encoded);
// <div class="test">Hello & goodbye</div>
// Decode
const decoded = he.decode('<div>Hello</div>');
console.log(decoded); // <div>Hello</div>
// Different formats
he.encode('<tag>', { useNamedReferences: true }); // <tag>
he.encode('<tag>', { decimal: true }); // <tag>
he.encode('<tag>', { hexadecimal: true }); // <tag>Python
import html
# Escape
escaped = html.escape('<script>alert("XSS")</script>')
print(escaped)
# <script>alert("XSS")</script>
# Unescape
unescaped = html.unescape('<div>Hello</div>')
print(unescaped) # <div>Hello</div>Security Best Practices
⚠️ Important Security Notes:
- Escaping is NOT Enough: Combine with Content Security Policy (CSP) and backend validation.
- Context Matters: Use appropriate escaping for HTML content, JavaScript strings, URLs, and SQL.
- Don't Trust User Input: Always validate and sanitize on both client and server side.
- Use Framework Built-ins: React, Vue, and Angular escape by default—leverage these features.
Common Use Cases
- XSS Prevention: Escape user input before displaying:
<script>alert('XSS')</script>→<script>alert('XSS')</script> - Displaying Code: Show HTML code examples on web pages by escaping tags.
- JSON with HTML: Prepare HTML fragments for JSON serialization.
- Email Content: Escape special characters in email subjects and headers.
- Template Debugging: Unescape rendered template output to see actual HTML.
HTML-экранирование имеет фундаментальное значение для веб-безопасности и отображения данных. Я создал этот инструмент после работы с бесчисленными уязвимостями XSS во время аудитов безопасности и необходимости безопасного отображения пользовательского контента. Будь то очистка входных данных форм, отладка движков шаблонов, подготовка данных для сериализации JSON/XML или обучение концепциям веб-безопасности, правильное кодирование HTML-сущностей необходимо. Инструмент поддерживает три формата сущностей: именованные (<, >), десятичные (<, >) и шестнадцатеричные (<, >)—каждый полезен в разных контекстах. Вся обработка происходит на стороне клиента в вашем браузере, что делает безопасной обработку конфиденциального содержимого без отправки данных на сервер.
How to Use
Для экранирования: вставьте HTML или текст, содержащий специальные символы, в панель ввода. Инструмент автоматически преобразует символы вроде <, >, &, \", и ' в HTML-сущности в реальном времени. Выберите предпочитаемый формат сущностей: Именованные (наиболее читаемые, например &), Десятичные (широкая совместимость, например &), или Шестнадцатеричные (компактные, например &). Переключите 'Сохранить переносы строк' для сохранения или удаления переносов. Для снятия экранирования: вставьте HTML с сущностями, и инструмент декодирует их обратно в исходные символы. Опция 'Кодировать все символы' экранирует даже неспециальные символы, полезно для максимальной совместимости в крайних случаях.
Common Use Cases
Предотвращение XSS
Экранируйте пользовательский ввод перед отображением: '<script>alert(XSS)</script>' становится '<script>alert(XSS)</script>'.
Отладка шаблонов
Снимите экранирование с отрендеренного вывода шаблона, чтобы увидеть фактически сгенерированный HTML.
Экранирование JSON-строк
Подготовьте HTML-фрагменты для JSON-сериализации, экранировав кавычки и специальные символы.
Отображение кода
Покажите примеры HTML-кода на веб-страницах, экранировав теги, чтобы они отображались как текст.
Email HTML
Экранируйте специальные символы в темах или заголовках электронной почты.
Хранение в БД
Экранируйте HTML перед сохранением в текстовые поля, чтобы предотвратить проблемы с отображением.
Limitations & Important Notes
Этот инструмент обрабатывает HTML-сущности, определенные в спецификации HTML5. Он НЕ удаляет и не очищает потенциально опасные HTML-атрибуты (такие как onclick, onerror) или JavaScript-код—он только экранирует символьные представления. Для настоящего предотвращения XSS комбинируйте экранирование с Content Security Policy (CSP) и валидацией ввода. Инструмент предполагает кодировку UTF-8; другие кодировки могут давать неожиданные результаты. Для очень больших документов (>5MB) ограничения памяти браузера могут вызвать замедление. Кодирование сущностей увеличивает размер текста; не идеально для сценариев с ограниченной пропускной способностью.