html的雙引號是正常的,每一個屬性,例如:value="",一般都有雙引號包著。但是用js添加頁面節(jié)點(diǎn)的時候,需要轉(zhuǎn)義,比如:
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、企業(yè)網(wǎng)站建設(shè)、成都手機(jī)網(wǎng)站制作、網(wǎng)頁設(shè)計、品牌網(wǎng)站設(shè)計、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)建站擁有實力堅強(qiáng)的技術(shù)研發(fā)團(tuán)隊及素養(yǎng)的視覺設(shè)計專才。
var html = "div onclick=\" openUrl( ' s:url value='%{resUrl}'/ ' ) \"/div";
document.getElementById("main").innerHTML = html;
最外面的那個雙引號是表示一個字符串變量的意思,而被包在里面的雙引號就不起作用,只有在頁面顯示的時候才會起作用,也就是說js不會認(rèn)為第一個雙引號和第二個雙引號是一對,會認(rèn)為/div";這個雙引號才是結(jié)尾,因為中間的被"\"轉(zhuǎn)義了。
openUrl函數(shù)中的第一對單引號是表示字符串的意思,你省去也不會報錯,中間那一對則是標(biāo)簽的屬性需要。
最后的問題說明對struts的標(biāo)簽不熟,可以看下struts的property和ognl表達(dá)式,最多半個小時可學(xué)會。
1.html中的轉(zhuǎn)義:在html中如果遇到轉(zhuǎn)義字符(如“ ”),不管你的頁面字符編碼是utf-8亦或者是GB2312,都會直接打印成相應(yīng)的字符;而當(dāng)遇到(如:“\u8981”【此處的8981是16進(jìn)制值】)時,則不會打印成相應(yīng)字符。
/*
*html標(biāo)記的轉(zhuǎn)義
*@example
*pHello World!/p
* ||等價于
*pHello World!/p
* ||等價于
*pHello?World!/p*/
" " == "?"; //false
" ".length == 6; //true
2.html中的unicode編碼:(如:”?”,【此處的160是10進(jìn)制值】)
3.javascript內(nèi)的unicode編碼:當(dāng)遇到unicode編碼時(如:“\u8981”),則會打印成相應(yīng)的字符;而在javasript標(biāo)簽中,不會對轉(zhuǎn)義字符進(jìn)行轉(zhuǎn)義(如“ ?”)
/*
*javascript中unicode編碼
*@example
*"\u8981" == "要"; //true
*/
"\u8981".length == 1; //true
4.javascript中的轉(zhuǎn)義:(如:”\n”會轉(zhuǎn)義成換行符)
5.javascript中unicode編碼和字符的相互轉(zhuǎn)化
/*
*unicode編碼和字符相互轉(zhuǎn)化
*/
"要".charCodeAt() == 35201; //true,35201為10進(jìn)制值
String.fromCharCode(35201) == "要"; //true,35201為10進(jìn)制值
"\u89" + "81" == "要"; //false,值為"u8981",是由于"\u"會轉(zhuǎn)義成"u"
//從unicode編碼到字符的方法
eval("(\"\u89" + "81\")") == "要"; //true,8981為16進(jìn)制值
最無腦的方法
var StringToBeDecoded = '\\u00ff'
var DecodedString = eval('"' + StringToBeDecoded + '"')
當(dāng)然因為用到了eval所以陷阱相當(dāng)多
比如任意代碼執(zhí)行問題
比如無效字符串無法解析啊等等
所以其實你可以用escape去存儲字符串
然後用unescape去解析
比如escape('\u00ff') = '%FF'
看你的需求
目測你是在寫前端後臺的數(shù)據(jù)交互?
那麼也可以用JSON的思路(假設(shè)你生成數(shù)據(jù)的端可以使用任何一種JSON庫
例如瀏覽器自帶的JSON
就可以這樣寫
JSON.stringify({Data : '\n\r\x88\u00ff\u4e00'}).replace(/[\x80-\xff]/g,function(S){return '\\x' + S.charCodeAt().toString(16)}).replace(/[\u1000-\uffff]/g,function(S){return '\\' + escape(S).substring(1)})
這樣你就能拿到一個完全由ASCII組成的數(shù)據(jù)了
然後怎麼解析就不必多說了吧
JScript 提供了一些特殊字符,允許在字符串中包括一些無法直接鍵入的字符。每個字符都以反斜杠開始。反斜杠是一個轉(zhuǎn)義字符,表示 JScript 解釋器下面的字符為特殊字符。
轉(zhuǎn)義序列 字符
\b 退格
\f 走紙換頁
\n 換行
\r 回車
\t 橫向跳格 (Ctrl-I)
\' 單引號
\" 雙引號
\\ 反斜杠
請注意,由于反斜杠本身用作轉(zhuǎn)義符,因此不能直接在腳本中鍵入一個反斜杠。如果要產(chǎn)生一個反斜杠,必須一起鍵入兩個反斜杠 (\\)。
document.write('The image path is C:\\webstuff\\mypage\\gifs\\garden.gif.');
document.write('The caption reads, "After the snow of \'97. Grandma\'s house is covered."');
js中的特殊字符,加上轉(zhuǎn)義符\ 。
例如:
var txt="We are the so-called "Vikings" from the north." document.write(txt) 【錯誤】
var txt="We are the so-called \"Vikings\" from the north." document.write(txt) 【正確】