Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как в js сохранить переносы строк и отображать теги как текст? (https://javascript.ru/forum/misc/85459-kak-v-js-sokhranit-perenosy-strok-i-otobrazhat-tegi-kak-tekst.html)

accountnujen 10.09.2023 16:43

Как в js сохранить переносы строк и отображать теги как текст?
 
Есть поле, в которое админ (это важно, потому что это не случайный пользователь-вредитель) вводит какой-то текст. Обрабатывать текст можно только со стороны JS (браузера). Данные после нажатия на кнопку "сохранить" делают JSON.stringify и сохраняются в файл. Затем таким же образом достаются из файла и делают JSON.parse. Мне нужно сделать так, чтобы в выводе было то, что было в textarea. На пару с chatgpt у меня ничего не получается. На данный момент я дошёл до такого результата:

function escapeHTML(text) {
    return text.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/&/g, "&amp;");
}

то есть в результате у меня ничего не работает из того, что я планировал) Я пытался делать замену \n на <br>
, но этот тег тоже залетает под редактуру...

рони 10.09.2023 17:28

accountnujen,
:-?
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
<p id="p"></p>
 <script>
    let str = `asd
    asd <jopa></jopa> <h1></h1>`;
    let json = JSON.stringify(str);
    let txt = JSON.parse(json);
    p.outerText = txt;
 </script>
</body>

</html>

voraa 10.09.2023 17:34

Так а что в конечной строке то должно быть? \n или <br>
Если <br>, то сначала заменяешь < и > на &lt; и &gt, а потом \n на <br>.
И только сначала & заменить на &amp; а потом уже все остальное
<!DOCTYPE HTML>
 
<html>
 
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>
 
<body>
<p id="p"></p>
 <script>
	function escapeHTML(text) {
		return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\n/g, '<br>');
	}

    let str = `asd
    asd <jopa></jopa> <h1></h1>`;
    
    let json = JSON.stringify(escapeHTML(str));
    let txt = JSON.parse(json);
    p.innerHTML = txt;
 </script>
</body>
 
</html>


Часовой пояс GMT +3, время: 15:44.