C # StringBuilder - как экранировать эту строку:
-
19-08-2019 - |
Вопрос
<document.write("<SCR"+"IPT TYPE='text/javascript' SRC='"+"http"+(window.location.protocol.indexOf('https:')==0?'s':'')+"://"+gDomain+"/"+gDcsId+"/wtid.js"+"'><\/SCR"+"IPT>");
Мне нужно экранировать вышеприведенную строку, чтобы добавить все это в StringBuilder, но до сих пор я должен что-то упустить, потому что завершение строки некорректно ...
Решение
string x = @"<document.write(""<SCR""+""IPT TYPE=""'text/javascript' SRC='""+""http""+(window.location.protocol.indexOf('https:')==0?'s':'')+""://""+gDomain+""/""+gDcsId+""/wtid.js""+""'><\/SCR""+""IPT>"");";
Префикс @ упрощает экранирование. Вы просто должны включить каждый & Quot; в " ".
Вы обнаружите, что вашу программу гораздо проще поддерживать, если вы храните JavaScript во внешнем файле. Я предполагаю, что вы используете StringBuilder, чтобы вы могли смешивать биты постоянного скрипта с несколькими динамическими значениями? Вы можете записать его в файл, но для динамических значений добавьте экранирование следующим образом:
var fromCSharp = {0};
Затем во время выполнения загрузите файл JS и передайте его в string.Format в качестве строки формата, а также значения для замены каждого вхождения {0}, {1} и т. д. Вам нужно только загрузить строку формата из файл один раз и держите его в кэше.
Кроме того, если значения, которые вы вставляете в JavaScript, сами являются строковыми литералами, вам нужно будет экранировать их в соответствии с синтаксисом JavaScript.
Другие советы
Вы должны попробовать что-то вроде этого:
@"<document.write(""<SCR""+""IPT TYPE='text/javascript' SRC='""+""http""+(window.location.protocol.indexOf('https:')==0?'s':'')+""://""+gDomain+""/""+gDcsId+""/wtid.js""+""'><\/SCR""+""IPT>"");"
Если префикс строкового литерала ставится перед @, единственное, что нужно сделать, это удвоить кавычку &; carácter.
Надеюсь, что это поможет.
Строка в начале - это именно то, что мне нужно ... (я не путаю JavaScript с C # - мне просто нужно добавить строку в C # StringBuilder, которая по совпадению содержит немного JavaScript)
Это внешний скрипт, который я должен разместить на странице, используя StringBuilder (по разным причинам).
У меня нет возможности узнать, приведет ли сбой к изменениям в скрипте, поэтому я должен включить его как есть ...
Это всего 1 строка всего сценария, но большинство других строк мне удалось экранировать правильно, и они включены по желанию ...
Я думаю, что вы путаете то, что есть JavaScript
, и то, что есть C#
. Можете ли вы сказать нам строку, которую вы пытаетесь достичь ...
например
window.location.protocol.indexOf('https:')
is gDomain
но предположительно
gDcsId
и <=>
являются переменными из вашего <=> метода
может быть, это
"<SCRIPT TYPE='text/javascript' SRC='"+"http"+"(window.location.protocol.indexOf('https:')==0?'s':'')"+"://" + gDomain + "/"+ gDcsId+ "/wtid.js"+"'></SCRIPT>")