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>"");";
@ prefix는 탈출을 더 간단하게 만듭니다. 각 "을" "로 바꾸면됩니다.
JavaScript를 외부 파일에 저장하면 프로그램을 유지하기가 훨씬 쉽습니다. 나는 당신이 StringBuilder를 사용하고 있다고 가정하여 몇 가지 동적 값과 상수 스크립트를 혼합 할 수 있습니까? 파일로 쓸 수 있지만 동적 값에 대해 이와 같은 탈출을 넣습니다.
var fromCSharp = {0};
그런 다음 런타임에 js 파일을로드하고 {0}, {1} 등의 각 발생률을 대체하기 위해 값과 함께 문자열로 string.format에 제공합니다. 파일에서 형식 문자열을 한 번만로드하면됩니다. 캐시를 유지하십시오.
또한 JavaScript에 삽입하는 값이 자체 문자 리터럴 인 경우 JavaScript의 구문에 따라 탈출해야합니다.
다른 팁
다음과 같은 것을 시도해야합니다.
@"<document.write(""<SCR""+""IPT TYPE='text/javascript' SRC='""+""http""+(window.location.protocol.indexOf('https:')==0?'s':'')+""://""+gDomain+""/""+gDcsId+""/wtid.js""+""'><\/SCR""+""IPT>"");"
문자열 문자를 @로 접두사 할 때 필요한 유일한 탈출은 "Caracter를 두 배로 늘리는 것입니다.
이 도움을 바랍니다.
처음의 문자열은 내가 원하는 것입니다 ... (나는 c#과 javaScript를 혼합하지 않습니다 - 나는 c# stringBuilder에 문자열을 추가하면 일치에 따라 일부 javaScript가 포함되어 있습니다).
StringBuilder (여러 가지 이유로)를 사용하여 페이지에 넣어야하는 외부 스크립트입니다.
스크립트의 변경 사항이 실패할지 알 수있는 방법이 없습니다.
총 스크립트의 한 줄에 불과하지만 대부분의 다른 줄은 제가 올바르게 탈출했으며 원하는대로 포함됩니다 ...
나는 당신이 무엇을 혼합하고 있다고 생각합니다 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>")