Ответ 1
при попытке
alert('I\'m testing');
возникает проблема
Обратная косая черта также является побегом в строках Ruby! Итак, строковый литерал:
"alert('I\'m testing');"
означает строку:
alert('I'm testing');
обратная косая черта уже ушла, прежде чем JavaScript взглянет на нее. Когда вы пишете строковый литерал JavaScript внутри строкового литерала Ruby, вам нужно избежать escape-кода \\
, чтобы получить реальный \
, который затем в JavaScript уберет апостроф.
escape_javascript
корректно генерирует обратную косую черту для JavaScript, если обратная косая черта была включена в ее ввод. Но опять же, если вы пишете строковый литерал, вам нужно избежать обратной косой черты, чтобы получить реальную обратную косую черту:
escape_javascript("\b") -> this is a backspace character!
escape_javascript("\\b") -> this is backslash-then-letter-b;
escaped for JavaScript literal to double-backslash-then-b.
Итак, это прекрасно:
"'"+escape_javascript(myvar)+"'"
вы также можете использовать JSON-кодер для создания строкового литерала JavaScript, включая окружающие кавычки.