Экранирование строк в JavaScript - PullRequest
59 голосов
/ 21 апреля 2009

Есть ли в JavaScript встроенная функция, такая как PHP addslashes (или addcslashes), для добавления обратной косой черты в символы, которые необходимо экранировать в строке?

Например, это:

Это демонстрационная строка с «одинарные кавычки» и «двойные кавычки».

... станет:

Это демонстрационная строка с «одинарные кавычки» и \ "Двойные кавычки \".

Ответы [ 4 ]

86 голосов
/ 21 апреля 2009

http://locutus.io/php/strings/addslashes/

function addslashes( str ) {
    return (str + '').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
}
67 голосов
/ 03 апреля 2014

Вы также можете попробовать это для двойных кавычек:

JSON.stringify(sDemoString).slice(1, -1);
JSON.stringify('my string with "quotes"').slice(1, -1);
39 голосов
/ 31 марта 2010

Вариант функции, предоставляемой Паоло Бергантино , которая работает непосредственно со строкой:

String.prototype.addSlashes = function() 
{ 
   //no need to do (str+'') anymore because 'this' can only be a string
   return this.replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
} 

Добавив код выше в свою библиотеку, вы сможете сделать:

var test = "hello single ' double \" and slash \\ yippie";
alert(test.addSlashes());

EDIT:

Следуя предложениям в комментариях, тот, кто обеспокоен конфликтами между библиотеками JavaScript, может добавить следующий код:

if(!String.prototype.addSlashes)
{
   String.prototype.addSlashes = function()... 
}
else
   alert("Warning: String.addSlashes has already been declared elsewhere.");
2 голосов
/ 07 июля 2016

Использовать encodeURI ()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

Исключает практически все проблемные символы в строках для правильного кодирования JSON и передачи для использования в веб-приложениях. Это не идеальное решение для проверки, но оно ловит низко висящие фрукты.

...