Как сохранить текст, отформатированный в mongodb? [Дубликат]

Правильный ответ:

select table_record_id,
group_concat(if(value_name='note', value_text, NULL)) as note
,group_concat(if(value_name='hire_date', value_text, NULL)) as hire_date
,group_concat(if(value_name='termination_date', value_text, NULL)) as termination_date
,group_concat(if(value_name='department', value_text, NULL)) as department
,group_concat(if(value_name='reporting_to', value_text, NULL)) as reporting_to
,group_concat(if(value_name='shift_start_time', value_text, NULL)) as shift_start_time
,group_concat(if(value_name='shift_end_time', value_text, NULL)) as shift_end_time
from other_value
where table_name = 'employee'
and is_active = 'y'
and is_deleted = 'n'
GROUP BY table_record_id
2
задан Qualcuno 13 April 2015 в 17:43
поделиться

2 ответа

Это не проблема с MongoDB, но вы узнали, как работает HTML:)

Когда вы отправляете текстовое поле, все символы новой строки являются просто символами новой строки, отправленными на сервер (\n или \r\n). Они хранятся в базе данных как есть. Тем не менее, в новых символах HTML игнорируются и рассматриваются как пробелы при представлении текста (если вы не обернете это в блок <pre></pre>).

Решение заключается в замене всех \n на теги <br />. Если вы знакомы с PHP, это будет использовать функцию nl2br, которая была перенесена на JavaScript здесь: http://phpjs.org/functions/nl2br/

1
ответ дан Qualcuno 20 August 2018 в 21:12
поделиться
  • 1
    Отлично, спасибо. Я написал аналогичную функцию, но не был уверен, есть ли что-то родное для MongoDB. Это показалось немного взломанным, но, я думаю, нет. Еще раз спасибо. – tim 13 April 2015 в 17:48
  • 2
    Нет, это не хаки! И вы не должны этого делать на уровне базы данных, потому что это всего лишь представление данных. Вы должны сделать это на уровне, который представляет данные (например, перед отправкой этого шаблона или если вы разрабатываете сервер API, сделайте это на клиенте) – Qualcuno 13 April 2015 в 17:51
  • 3
    Да, я разработал API, и сейчас я работаю над клиентом. Спасибо за помощь всем. – tim 13 April 2015 в 17:56

Это не имеет ничего общего с MongoDB. Вы получаете текст из элемента textarea HTML, и он имеет символы «новая строка» (\n, \r или \r\n) в качестве разделителя параграфа. Когда вы помещаете его в элементы HTML p, эти новые строки интерпретируются как базовые пробелы. Вы должны преобразовать эти символы новой строки в элементы HTML br или поместить каждый текстовый блок в отдельные p-элементы.

Проверьте этот пакет npm: https://www.npmjs.com/package/ nl2br

Вы можете легко кодировать лучшую.

1
ответ дан Mustafa Dokumacı 20 August 2018 в 21:12
поделиться
  • 1
    Удивительно, спасибо. – tim 13 April 2015 в 17:50
  • 2
    String.prototype.nl2br = function() { return this.replace(/\\n/g, "<br />"); } Это заменяет мою\n в моих строках с помощью & lt; br / & gt; но он не обрабатывается как HTML. например Lorem ipsum dolor\n sit amet. превращается в Lorem ipsum dolor<br /> sit amet. – tim 20 April 2015 в 18:50
  • 3
    "Lorem ipsum dolor & lt; br / & gt; sit amet. & quot; это версия HTML новой строки. Любой браузер будет реализовывать его как новую строку. В какой среде вы печатаете результат и что видите в результате? Вы не должны размещать вывод в & lt; pre & gt; например, элемент. – Mustafa Dokumacı 21 April 2015 в 12:40
  • 4
    хорошо, спасибо. Я добавил CSS из white-space: pre-line;. Теперь мне просто нужно добавить угловой фильтр, поэтому несколько абзацев представлены не только одним тегом <p>, но и тегом абзаца для каждого из них. – tim 21 April 2015 в 16:22
Другие вопросы по тегам:

Похожие вопросы: