Как экранировать строку и JSON .stringify - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь обслуживать API с nodeJS и использованием базы данных oracle. У меня есть такой объект, который я получил от req.body.detail:

{ 
    title: "How to Have", 
    content: "<ol><li><b>Lorem ipsum dolor sit amet.</b></li></ol>"
} 

, тогда я делаю

const data = JSON.stringify(req.body.detail);

, но вставленные в таблицу данные не имеют escape-строка , она становится похожей:

{"title":"How to Have","content":"<ol><li><b>Lorem ipsum dolor sit amet.</b></li></ol>}

Как я могу экранировать строку для всего объекта, и результат становится таким:

{"title":"How to Have","content":"<ol><li><b>Lorem ipsum dolor sit amet.<\/b><\/li><\/ol>}

Мой столбец в таблице имеет тип данных clob.

Ответы [ 3 ]

0 голосов
/ 05 апреля 2020

Используйте функцию JSON.stringify(), например, для отступов:

const data = JSON.stringify(req.body.detail, null, 4);

Я думаю, большинство людей не знают, что JSON.stringify() принимает три параметра: первый - данные JSON, секунда - это функция, а третья - это число, основанное на том, на сколько пробелов вы хотите, чтобы данные имели отступ. Вот документация MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

0 голосов
/ 06 апреля 2020

В общем, не экранируйте данные о вставке в БД. Вы должны отфильтровать данные на INSERT (чтобы убедиться, что они действительны) и экранировать данные на SELECT. Только когда вы выбираете данные, приложение (или будущие приложения) знают, где эти данные будут использоваться. Некоторым приложениям не нужны экранированные данные.

0 голосов
/ 05 апреля 2020

Чтобы экранировать эти / символы с \, используйте String.replace () :

const escapedString = inputString.replace(/\//g, '\\/')

Первый параметр - регулярное выражение. Его квалификатор g означает соответствие всем экземплярам, ​​а не только первому. \/ означает совпадение с символом /, который необходимо заменить в регулярном выражении, поскольку ....

сами регулярные выражения начинаются и заканчиваются /. Следовательно, /\//g.

И строковый литерал замены равен \\/, потому что вы должны экранировать \, чтобы поместить его в строковый литерал: \\/, написанный в вашей программе, возвращает вам значение \/.

Но Oracle не требует, чтобы вы убегали от этих персонажей до того, как вы заклинили их в сгусток. Так что это должно быть требованием от программного обеспечения, которое будет читать этот клоб.

...