API vs. Form: несоответствие контента при редактировании

Здравствуйте,

Я только что заметил, что когда я публикую HTML-контент через API posts.json, а затем редактирую пост, я вижу HTML-код в содержимом поста.

Как отображается пост:

При нажатии на редактирование:

Запрос к API:

Когда я публикую пост напрямую через форму, HTML-код не отображается при редактировании (отображение одинаковое):

Как можно избежать отображения HTML-кода в содержимом при редактировании поста?

Спасибо :slight_smile:

Привет, Luicid :wave:

Необработанный контент, отображаемый в редакторе, принимает массив HTML-тегов, поэтому они будут показаны как обычный текст.

Если вы хотите добавить перенос строки без использования тега <br>, используйте \n. :slight_smile:

Первая строка\nНовая строка

Если вы хотите получить два абзаца, нужно добавить дополнительный перенос строки:

Первая строка\n\nНовая строка

При редактировании этих сообщений теги <br> отображаться не будут.

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

Привет снова, Canapin :slight_smile:

Понятно. То есть единственный способ обеспечить чистое отображение, когда пользователи редактируют свои мигрированные HTML-публикации через API, — это заменить все теги <p> и <br> на \n, если я правильно понимаю?

Спасибо.

Если вы пытаетесь очистить импортированный HTML-контент, вы также можете заменить параграфы на переносы строк, чтобы гарантировать наличие переносов и корректную обработку поста.

<p>некоторый текст</p><p>другой текст</p>

превратится в:

\nнекоторый текст\n\nдругой текст\n

И будет отображено как:


некоторый текст

другой текст


Ок, спасибо :slight_smile:
Последний вопрос:
Можете ли вы подсказать, как добавить упоминание, например такое: @Canapin, в посте через API? Я пробовал использовать @username в поле raw, но это не работает.

Убедитесь, что вы отправляете полезную нагрузку в формате JSON.

{
    "raw": "Упоминание для проверки: @canapin",
    "topic_id": 86,
    "reply_to_post_number": 3
}

Результат — работающее упоминание:

Если вы импортируете большой объем данных, используйте скрипт импорта. Во многих из них есть примеры удаления HTML-тегов, а также обработки кавычек и упоминаний.

Если вы хотите постоянно добавлять данные на существующий сайт, используйте API.

А, я понял свою ошибку! Я тестировал с именем пользователя в нижнем регистре, а нужно было использовать точное имя, так как упоминание чувствительно к регистру. Извините.

Спасибо, что нашли время мне помочь! :wink:

Хорошего дня!

Честно говоря, я создал POC с помощью скрипта импорта на Ruby, но так как мне нужно синхронизировать данные в течение нескольких дней между старым решением и Discourse, я предпочитаю запускать простой скрипт на Python. Это гораздо быстрее в настройке и поддержке. Кроме того, это последовательно, так как я извлекаю старые данные с помощью Python. Предыдущий провайдер не предоставит нам доступ к базе данных, поэтому я извлек весь контент в базу данных.

Но, конечно, это более простое решение, если это простая миграция :slight_smile:

Упоминания должны работать, даже если мы изменим регистр букв:

image

На скриншоте в вашем первом посте используется form-data. Вам следует использовать поле raw с форматированием JSON. :slight_smile: