Параметр mangle в библиотеке Marked
предназначен для управления способностью библиотеки автоматически
шифровать или маскировать адреса электронной почты в тексте Markdown.
Основная цель этой функции — защита email-адресов от спам-ботов, при
этом визуально и функционально для пользователя адрес остаётся доступным
и читаемым.
Когда включён mangle, библиотека преобразует символы в
адресе электронной почты в HTML-сущности. Например, символ
@ будет заменён на @, а точка — на
.. В результате код страницы остаётся безопасным
для индексации и трудночитаемым для автоматических сканеров, но браузер
корректно отображает адрес и позволяет пользователю кликать по
ссылке.
Параметр mangle может принимать следующие значения:
true — включение автоматического
шифрования email-адресов. По умолчанию Marked использует это
поведение.false — отключение маскировки адресов.
Email-адреса остаются в исходной форме в HTML.Пример использования:
import { marked } from 'marked';
const markdown = 'Напишите мне на ';
const htmlWithMangle = marked(markdown, { mangle: true });
const htmlWithoutMangle = marked(markdown, { mangle: false });
console.log(htmlWithMangle);
// Выведет: Напишите мне на email@example.com
console.log(htmlWithoutMangle);
// Выведет: Напишите мне на email@example.com
mangle тесно связан с параметром
headerIds и опцией
xhtml:
headerIds отвечает за генерацию
идентификаторов заголовков. Если идентификаторы сгенерированы
автоматически и содержат символы @ или ., их
обработка может пересекаться с функцией mangle. При
использовании mangle: true такие символы внутри ссылок
email также будут преобразованы в HTML-сущности.xhtml управляет закрытием одиночных
тегов. При включённом mangle и xhtml: true
генерация для email-адресов остаётся корректной,
соблюдая синтаксис XHTML.Только email-адреса Параметр mangle
применяет преобразование исключительно к адресам в формате
local@domain. Обычные тексты или ссылки на сайты не
подвергаются маскировке.
Влияние на SEO Так как текст остаётся читаемым для браузера, но преобразован в HTML-сущности, индексация адресов поисковыми системами может быть частично затруднена. Это не критично, так как email-адреса редко должны индексироваться.
Комбинация с пользовательскими рендерерами При
использовании собственного рендерера через
marked.use({ renderer: customRenderer }), важно учитывать,
что функция mangle вызывается до передачи
данных в рендерер. Если требуется собственная обработка email,
mangle может быть отключён, а шифрование реализовано
вручную.
mangle: true.mangle: false для
упрощения обработки HTML и снижения количества сущностей.user+tag@example.com), проверять
корректность генерации ссылок при включённом mangle.Marked использует функцию escapeEmail для преобразования
символов email в HTML-сущности. Алгоритм следующий:
Разбивка email на отдельные символы.
Для каждого символа случайным образом выбирается одна из форм:
код;)код;)Такой подход делает адрес менее предсказуемым для спам-ботов, сохраняя полную работоспособность.