Как сохранить текст, отправленный пользователем, в формате HTML?

Как можно сделать так, чтобы сообщения, содержащие ссылки, жирный текст, цитаты и другие форматирования, отправленные пользователем через личное сообщение, могли быть точно также сохранены и отправлены через бота в админке?
  • 21 января 2024 г. 5:38
Ответы на вопрос 1
Для сохранения текста, отправленного пользователем, в формате HTML, необходимо следовать определённым шагам. Предположим, что есть мессенджер или чат-бот, который принимает сообщения от пользователей. Вот как можно обработать и сохранить текст с форматированием в HTML:

1. Преобразование пользовательского ввода в HTML:
   Если пользователь отправляет сообщение с разметкой (например, Markdown или BBCode), вам нужно будет преобразовать эту разметку в HTML. Можно использовать готовые библиотеки для популярных языков программирования, которые делают такое преобразование. Например, для Python существует библиотека `markdown` для преобразования Markdown в HTML.

```python
import markdown

# Пример преобразования Markdown в HTML
user_input = "Это **жирный текст** и это [ссылка](https://example.com)."
html_content = markdown.markdown(user_input)
```

2. Сохранение HTML:
   После преобразования форматирования в HTML, этот HTML можно сохранить в базе данных. Так как HTML может содержать скрипты и вредоносный код, важно очистить его перед сохранением с помощью библиотеки типа `bleach` для удаления всего, что может быть потенциально опасным.

```python
import bleach

# Очистка HTML от потенциально опасных тегов и атрибутов
clean_html = bleach.clean(html_content)
# Сохранение очищенного HTML в базу данных
# Здесь должен быть код для сохранения clean_html в вашу БД
```

3. Отправка HTML через бота:
   Когда вы захотите отправить содержимое HTML через бота в админку, вам необходимо будет воспользоваться API или методом, который поддерживает HTML. Например, многие мессенджеры, такие как Telegram, разрешают отправку сообщений с HTML-разметкой.

```python
import requests

# Допустим, бот отправляет сообщения через HTTP API
endpoint = "https://api.example.com/sendMessage"
headers = {"Content-Type": "application/json"}
data = {
    "chat_id": "admin_chat_id",
    "text": clean_html,  # Использование предварительно сохранённого HTML
    "parse_mode": "HTML"  # Сообщаем API, что текст сообщения в формате HTML
}

# Отправка сообщения
response = requests.post(endpoint, headers=headers, json=data)
```

Учтите, что необходимо применять эскейпинг к строкам в HTML, чтобы избежать XSS-уязвимостей и других потенциальных проблем безопасности при сохранении и отображении HTML-контента из пользовательских сообщений. Следует также лимитировать теги и атрибуты, которые можно использовать, чтобы обеспечить только безопасные и контролируемые формы форматирования.
Похожие вопросы