2013-03-22 3 views
3

JSP:Побег одинарные кавычки в строке

<% final String data = "some test with ' single quotes"; %> 
<script> 
    var str = '<%= data %>'; 
<script> 

Результат есть (JavaScript):

var str = 'some test with ' single quotes'; 

Uncaught SyntaxError: Unexpected identifier

Как заменить эту единственную цитату \', чтобы избежать ошибки JavaScript?

+0

Используете ли вы какой-либо веб-фреймворк? – orique

+0

@orique no, я не –

+0

какая ошибка вы получаете, когда вы это делаете? –

ответ

5

Используйте escapeEcmaScript метод из Apache Commons Lang пакета:

Escapes any values it finds into their EcmaScript String form. Deals correctly with quotes and control-chars (tab, backslash, cr, ff, etc.). So a tab becomes the characters '\\' and 't' .

The only difference between Java strings and EcmaScript strings is that in EcmaScript, a single quote and forward-slash (/) are escaped.

Пример:

input string: He didn't say, "Stop!"

output string: He didn\'t say, \"Stop!\"

+2

Определенно, избыток, поскольку он также преобразует любой нелатинский алфавитный символ в его последовательность юникодов ('" кириллица " '->' '\\ u043A \\ u0438 \\ u0440 \\ u0438 \\ u043B \\ u043B \\ u0438 \\ u0446 \\ u0430" '). –

-2

Вы хотите просто удвоить свою строку, чтобы у вас действительно есть \, а затем '?

<% final String data = "some name with \\' single quote"; %> 

Из кода JavaScript, вы можете использовать string replace функциональность:

var str2 = str1.replace("'","\\'"); 
+2

Данные не жестко закодированы. Я беру его из databese и заменяю одиночные кавычки –

+1

Я не думаю, что это жестко закодированная строка, о которой беспокоит OP –

1

Помните, что вам также необходимо кодировать двойные кавычки, новые строки, вкладки и многое другое. Один из способов сделать это является использование org.apache.commons.lang.StringEscapeUtils

public class JavaScriptEscapeTest { 

    public static void main(String[] args) throws Exception { 

     String str = FileUtils.readFileToString(new File("input.txt")); 
     String results = StringEscapeUtils.escapeEcmaScript(str); 
     System.out.println(results); 

    } 

} 

input.txt

Here is some "Text" that I'd like to be "escaped" for JavaScript. I'll try a couple special characters here: \ "

выхода

Here is some \"Text\" that\r\nI\'d like to be \"escaped\" for JavaScript.\r\nI\'ll try a couple special characters here: \ \"

+1

Больше не существует метода 'escapeJavaScript'. – VisioN

+0

@VisoN переименован в 3.1, был там до 2.6 –

+0

Почему кто-то изменил это? Это правильно, если вы используете org.apache.commons 2.6 (версия, с которой мы работали). Кроме того, этот вопрос был закрыт, связавшись с ответом, в котором говорится то же самое, что я сказал ... –

Смежные вопросы