2015-08-26 2 views
0

Я создал кнопку «Редактировать комментарий» в javascript для сайта. На самом деле все работает нормально, но escape-последовательности строк не работают. Я просто пытался поместить в редактирование ввода что-то вродеПравильный способ избежать строки

<script> alert(user->id); </script> 

И это показывает предупреждение!

Я пытался сделать некоторые длинные побеги, как они ниже, но они ничего не меняют, предупреждение по-прежнему появляется:

newComment.replace("'","\'"); 
newComment.replace("\"","\\\""); 
newComment.replace("(","\("); 
newComment.replace(")","\)"); 
newComment.replace("<","\<"); 
newComment.replace(">","\>"); 
newComment.replace(";","\;"); 

Я также попытался использовать encodeURI, но он показывает insantly закодированного комментария которые не выглядят хорошо ...

Итак, каков правильный способ избежать строк сейчас? Я читаю десятки подобных тем, но я не получаю это вообще ...

+1

Каков ваш фактический код? Вставить jsfiddle? –

ответ

1

, но они не меняют ничего

newComment.replace("'","\'"); 

вы делаете ничего с результатом функция. вместо этого, сделать это

newComment = newComment.replace("'","\'"); 

также, вы можете приковать функции замены вместе, но убедитесь, что вы делаете что-то в результате, как присвоить его переменной, в противном случае вы не эффективно делать ничего

newComment = newComment.replace("'","\'").replace(...).replace(...); 
+0

newComment - переменная, я думал, что этого уже достаточно – hiamprolish

+0

да, newComment - это переменная ... newComment.replace (...) выполняет функцию replace и возвращает результат, она не меняет значения переменных –

0

Экранирование символов в строке предназначено для использования, когда вам нужно закодировать этот символ в источнике приложения. Он сообщает интерпретатору/компилятору, что он не должен рассматривать этот символ как обычный, а не тот, который должен соблюдать правила синтаксиса языка. Например:

// механизм JavaScript интерпретирует это как ошибку и не выполняет код.

var newComment = 'test''; 

// это делает: «Эй, не используйте это, чтобы закрыть строку, рассматривать его как часть одного»

var newComment = 'test\''; 

поле \ говорит двигатель Когда пользователь вводит текст во время выполнения, движок уже знает, что он не должен интерпретироваться как источник, а как время выполнения, поэтому нет необходимости избегать его в этом сценарии.

примечание об этом коде:

newComment.replace("'","\'"); 
newComment.replace("\"","\\\""); 
newComment.replace("(","\("); 
newComment.replace(")","\)"); 
newComment.replace("<","\<"); 
newComment.replace(">","\>"); 
newComment.replace(";","\;"); 
  1. Строки неизменны в JavaScript, поэтому Новый_комментарий не будет когда-нибудь изменится. вы должны изменить и назначить как newComment = newComment.replace('','');
  2. Каждый раз, когда вы используете функцию replace, он создает новую строку, потому что строки неизменяемы. Вы должны быть осторожны в этом, потому что в зависимости от сценария это может создать много накладных расходов.
+0

JavaScript все еще должен быть интерпретирован, и вам все еще нужен действительный синтаксис, компиляция была неправильным термином, который не соответствует следующей строке. Я объяснял использование экранированных символов и то, как они используются в исходном коде. – kemiller2002

0

Строки JavaScript неизменяемы. Итак, вам нужно сохранить его в переменной после вызова replace.

в тот момент, когда вы просто вызываете функцию замены, но ничего не сохраняется.

Вот быстрый jsfiddle, чтобы помочь объяснить: https://jsfiddle.net/s13rboe5/

var a = "aaa" 
 
var b = "bbb" 
 

 
a.replace('a', 'b'); 
 
b = b.replace('b', 'a'); 
 

 
alert(a); 
 
alert(b);

также here найти ссылку, чтобы помочь вам понять, неизменность в JavaScript.