2008-11-12 124 views

回答

7

不,在JavaScript中不支持。這種解決方法似乎很成問題,因爲你現在失去了正斜槓的能力。

當我需要從ASP.NET後端創建警報消息或其他東西時,我自己遇到了這個問題,並將其粘貼在前端的JavaScript警報中。問題是開發人員可以在Page.Alert()方法中輸入任何內容。

我做了什麼來解決這個如下:

public void Alert(string message) 
{ 
    message = message.Replace("\\", "\\\\") 
     .Replace("\r\n", "\n") 
     .Replace("\n", "\\n") 
     .Replace("\t", "\\t") 
     .Replace("\"", "\\\""); 

    // and now register my JavaScript with this safe string. 
} 
+2

這只是一個例子,非常適合給定的問題(Windows路徑)。你可以替換/任何角色。 – PhiLho 2008-11-12 16:54:35

2

我再次重申什麼了之前說的 - 逐字的字符串是不可能的JavaScript。它實際上很容易逃脫像\n \\ \t等有效的轉義字符,但問題來自逃避無效字符,因爲他們在不同的功能處理方式,他們變得不兼容。例如

"\a".replace("\a","\\a")  // WORKS \a 
"aa\a".replace("\a", "\\a") // FAILS \aaa 

此外,如果你看的非法特殊字符數組,例如["\a"]該角色會只是看起來像一個a。這使得做你想要的東西基本上不可能。

希望至少爲你清除它。

3

一個解決辦法的大雜牌...

<html> 
<head> 
<script> 
function foo() { 
    var string = document.getElementById('foo').innerHTML; 
    alert(string); 
} 
window.onload=foo; 
</script> 
<style> 
#foo{ 
    display: none; 
} 
</style> 
</head> 
<body> 
Calling foo on page load. 
<div id="foo">\\server\path\to\file.txt</div> 
</body> 
</html> 
+0

這有很多副作用,你最好希望在你的字符串中沒有&。 – 2011-06-30 20:22:59

+3

@Juan Mendes:「大kludge」的哪部分你不瞭解? – 2011-06-30 21:17:36

+8

維基百科,自由的百科全書跳轉至:導航,搜索維基百科,自由的百科全書跳轉至:導航,搜索維基百科,自由的百科全書跳轉至:導航,搜索維基百科,自由的百科全書跳轉至:甚至有資格作爲雜食。 – 2011-06-30 22:06:31

7

模板串做支撐​​換行符。

`so you can 
do this if you want` 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

這當然並不阻止擴展在文本中出現的,並推而廣之,代碼執行,但也許這是好事嗎?

注:我不認爲有一種方式來利用現有的字符串,並通過表達插補運行它。這使得不可能以這種方式注入代碼,因爲代碼必須源自源代碼。我不知道可以按需進行表達式插值的API。

注2:模板字符串是ES2015/ES6功能。除了(等待它......)IE之外,在每個瀏覽器中都支持!但是,Edge支持模板字符串。

注3:模板字符串展開轉義序列,如果在字符串內部有一個字符串,該字符串將展開其轉義序列。

`"A\nB"` 

...將導致:

"A 
B" 

...這不會與JSON.parse一起工作,因爲現在在字符串文字中有一個換行符。可能很高興知道。

4

這是一個非常古老的線程,但還是這裏有一個解決方法:

function verbatim(fn){return fn.toString().match(/[^]*\/\*\s*([^]*)\s*\*\/\}$/)[1]} 

,你會這樣使用:

var myText = verbatim(function(){/*This 
is a multiline \a\n\0 verbatim line*/}) 

基本上就是在這裏發生的是,js的治療意見的確作爲逐字串。此外,這些都是隨功能一起存儲的。因此,這裏發生的是我們創建了一個函數,其中包含一些我們在逐字函數中提取的逐字評論。

0

只需使用String.raw()

String.raw`\n` 

將輸出

\\n 

但我不知道如何解決的情況下:

String.raw`hello`hello` // It will throw an TypeError 
String.raw`hello\`hello` // Output is 'hello\\`hello' 

我不知道如何處理` :(

相關問題