C # StringBuilder - как экранировать эту строку: - PullRequest
0 голосов
/ 04 декабря 2008
<document.write("<SCR"+"IPT TYPE='text/javascript' SRC='"+"http"+(window.location.protocol.indexOf('https:')==0?'s':'')+"://"+gDomain+"/"+gDcsId+"/wtid.js"+"'><\/SCR"+"IPT>");

Мне нужно экранировать вышеприведенную строку, чтобы добавить все это в StringBuilder, но до сих пор я должен что-то упустить, потому что завершение строки некорректно ...

Ответы [ 4 ]

6 голосов
/ 04 декабря 2008

Вы должны попробовать что-то вроде этого:

@"<document.write(""<SCR""+""IPT TYPE='text/javascript' SRC='""+""http""+(window.location.protocol.indexOf('https:')==0?'s':'')+""://""+gDomain+""/""+gDcsId+""/wtid.js""+""'><\/SCR""+""IPT>"");"

Когда перед строковым литералом ставится префикс @, требуется только экранирование, чтобы удвоить знак

Надеюсь, эта помощь.

4 голосов
/ 04 декабря 2008
string x = @"<document.write(""<SCR""+""IPT TYPE=""'text/javascript' SRC='""+""http""+(window.location.protocol.indexOf('https:')==0?'s':'')+""://""+gDomain+""/""+gDcsId+""/wtid.js""+""'><\/SCR""+""IPT>"");";

Префикс @ упрощает экранирование. Вы просто должны превратить каждое «в».

Вам будет гораздо проще поддерживать вашу программу, если вы сохраните JavaScript во внешнем файле. Я предполагаю, что вы используете StringBuilder, чтобы вы могли смешивать биты постоянного скрипта с несколькими динамическими значениями? Вы можете записать его в файл, но для динамических значений добавьте экранирование следующим образом:

var fromCSharp = {0};

Затем во время выполнения загрузите файл JS и передайте его в строку. Форматируйте в качестве строки формата вместе со значениями для замены каждого вхождения {0}, {1} и т. Д. Вам нужно только загрузить строку формата из файл один раз и держите его в кэше.

Также, если значения, которые вы вставляете в JavaScript, сами по себе являются строковыми литералами, вам нужно будет экранировать их в соответствии с синтаксисом JavaScript.

0 голосов
/ 04 декабря 2008

Строка в начале - это то, что я хочу именно ... (Я не путаю JavaScript с C # - мне просто нужно добавить строку в C # StringBuilder, которая по совпадению содержит некоторый JavaScript)

Это внешний скрипт, который я должен разместить на странице, используя StringBuilder (по разным причинам).

У меня нет возможности узнать, приведет ли какой-либо изменения в скрипте к сбою, поэтому я должен включить его как есть ...

Это всего лишь 1 строка из всего скрипта, но большинство других строк мне удалось экранировать правильно, и они включены по желанию ...

0 голосов
/ 04 декабря 2008

Я думаю, вы путаете то, что JavaScript и что C# Можете ли вы сказать нам строку, которую вы строка, которую вы пытаетесь достичь ...

например

window.location.protocol.indexOf('https:') - это JavaScript

но предположительно

gDomain и gDcsId

являются переменными из вашего C# метода

может быть, это:

"<SCRIPT TYPE='text/javascript' SRC='"+"http"+"(window.location.protocol.indexOf('https:')==0?'s':'')"+"://" + gDomain + "/"+ gDcsId+ "/wtid.js"+"'></SCRIPT>")
...