C # StringBuilder - как экранировать эту строку:

StackOverflow https://stackoverflow.com/questions/340111

  •  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>")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top