2012-07-29 38 views
1

我正在嘗試編寫一個搜索引擎小書籤(用於Chrome),但我無法轉義字符串。在小書籤中轉義未加工的未轉義字符串

例如,如果搜索引擎書籤如下:

javascript:alert("%s"); //%s is the search engine query, passed literally by chrome. 

然後運行它下面的字符串將給予不正確的結果:如果斜槓之後的字符恰好是

c:\zebra 

c:zebra instead of c:\zebra 

一個實際的轉義字符,那麼結果將根據字符而變化。

我已經試過逃脫和unescaping的字符串,我試過reg-ex'ing它,並用雙斜槓替換斜槓,但我想不出一種方法來獲得這個工作,因爲第一個原始字符串進入腳本的時間,它是未轉義的,並且之後的任何操作都將錯誤地看到它。

這怎麼能正確處理?

+0

這已無關的網址,但事實證明\是轉義字符在JavaScript中。在任何地方寫''c:\ zebra'',都會給你''c:斑馬紋''。你需要寫''c:\\斑馬線'' – Esailija 2012-07-29 16:31:54

+0

*> \是一個轉義字符在javascript中。* @Esailija,是的,我知道,這就是我正在嘗試解決的問題。 *>你需要寫*我不能改變字符串;它由用戶提供。 *>這與url無關*是的,用戶在地址欄/ Omnibar中輸入字符串。 – Synetech 2012-07-29 16:42:43

+0

然後我完全不理解這個,你能不能顯示你的代碼 – Esailija 2012-07-29 16:45:21

回答

3

到目前爲止,我只能使這項工作在鉻:

javascript: var str = (function(){STARTOFSTRING:/*%s*/ENDOFSTRING:;}).toString().match(/STARTOFSTRING:\/\*([\s\S]*)\*\/ENDOFSTRING:/)[1]; alert(str); 

寫作C:\斑馬會提醒C:\斑馬。

不幸的是,反編譯時,Firefox不支持函數體內的註釋。

你也可以不寫字符串中的序列*/,但一切應該從字面上傳遞,其中包括引號"'

+0

@Synetech這是一個字符串,你傳遞給「搜索引擎」 – Esailija 2012-07-29 17:30:12

+0

這適用於'alert',但沒有別的。什麼是'str'的​​對象類型*?我嘗試追加一個字符串,在其他類型的函數中使用它,但只有'alert'工作。 – Synetech 2012-07-29 17:30:58

+0

@Synetech你能告訴我那些不起作用的代碼嗎?它是一個字符串。 – Esailija 2012-07-29 17:31:16