Никогда не вставлять текст с innerHTML
;только вставка HTML с innerHTML
.
Браузеры в настоящее время имеют свойство textContent
:
yourDiv.textContent = stringFromServer;
Кроме того, просто чтобы очиститьОбщая ошибка, которую вы и многие другие разработчики совершаете, encodeURIComponent
предназначена для кодирования строки для вставки в URL , а не вставки в HTML . То же самое относится и к encodeURI
(который вы, вероятно, никогда не должны использовать).
Обновление :
Как указано в ваших комментариях, вы на самом деле хотите преобразуйте текст в HTML, используя некоторые правила вместо вставки простого текста в ваш HTML, что будет выполнять типичные правила нормализации пробелов.
Для этого есть много вариантов. Вот два:
- По-прежнему вставляйте только простой текст, но установите стиль CSS в контейнере на
white-space: pre
. Это изменяет способ отображения пробелов, поэтому новые строки вызывают разрывы строк. - Разделите исходную строку, а затем добавьте в div текстовые узлы и
<br/>
элементы.
Код для последнего может выглядеть примерно так:
function insertFormattedText(container, text) {
const chunks = text.split('\n');
chunks.forEach((chunk, i) => {
container.appendChild(document.createTextNode(chunk));
if (i < chunks.length - 1) {
container.appendChild(document.createElement('br'));
// Equivalent of ` `
container.appendChild(document.createTextNode('\u00A0\u00A0'));
}
});
}