摘自:http://blog.csdn.net/changhong009/article/details/46004343
' ----單引號
$#39; ----單引號(兼容IE)
" -----雙引號
在一個網頁中的按鈕,寫onclick事件的處理代碼,不小心寫成如下:
<input value="Test" type="button" onclick="alert(""OK"");" />
IE提示出錯后,再漫不經心地改為:
<input value="Test" type="button" onclick="alert(\"OK\");" />
結果還是出錯。
這時,我就想不通了,雖然我知道最直接的解決方法是寫成這樣:
<input value="" type="button" onclick="alert('OK');" />
但為什么javascript中的轉義字符\沒有效果了呢?
后來找到一段正常的代碼:
<input value="Test" type="button" onclick="alert("OK");" />
這時才理解,原來這時,還是歸於HTML的管轄范圍,所以轉義字符應該使用HTML的,而不是javascript的。
兩個雙引號的做法是vbScript的,\"這種做法則是javascript的,而HTML的,則是用",此外還可以使用:"、'。
下面列出各種表達方法:
<html>
< body>
< input value="外雙引號內雙引號-錯誤" type="button" onclick="alert("OK");" /><br />
< input value="外單引號內單引號-錯誤" type="button" onclick='alert('OK');' /><br />
< input value="兩個雙引號-錯誤" type="button" onclick="alert(""OK"");" /><br />
< input value="兩個單引號-錯誤" type="button" onclick="alert(''OK'');" /><br />
< input value="\+雙引號-錯誤" type="button" onclick="alert(\"OK\");" /><br />
< input value="\+單引號-錯誤" type="button" onclick="alert(\'OK\');" /><br />
< input value="外雙引號內單引號-OK" type="button" onclick="alert('OK');" /><br />
< input value="外單引號內雙引號-OK" type="button" onclick='alert("OK");' /><br />
< input value="外部不使用引號-OK" type="button" onclick=alert('OK');alert("OK"); /><br />
< input value="HTML轉義字符"(& # 3 4 ;)-OK" type="button" onclick="alert("OK");" /><br />
< input value="HTML轉義字符'(& # 3 9 ;)-OK" type="button" onclick="alert('OK');" /><br />
< input value="HTML轉義字符"(& # x 2 2 ;)-OK" type="button" onclick="alert('OK');" /><br />
< input value="HTML轉義字符'(& # x 2 7 ;)-OK" type="button" onclick="alert('OK');" /><br />
< input value="HTML轉義字符"(& q u o t ;)-OK" type="button" onclick="alert("OK");" /><br />
< input value="HTML轉義字符'(& a p o s ;)-IE錯誤"type="button" onclick="alert('OK');" /><br />
<input value="其它\\-錯誤" type="button" onclick="alert(\\"OK\\");" /><br />
< input value="其它\& # 3 4 ;-錯誤" type="button" onclick="alert(\"OK\");" /><br />
< /body>
< /html>
最近在做全文檢索模塊功能的測試,發現對於特殊符號的處理還存在很大的問題。
有人說Spring本身提供了對HTML、javascript、sql語句的轉碼工具類,但是測試了一下發現其HtmlUtils.htmlEscape()對單引號並沒做處理,只是轉碼了以下幾個特殊字符:
- &:&
- " :"
- < :<
- > :>
后來采用replace替換為('),IE瀏覽器里依然沒有起到作用,只好在google里測試一下查看源代碼,發現其轉碼成(')
今天看到下面這篇文章才明白:
轉:http://blog.huachen.me/single-quote-ie-html-entity
在 (x)HTML 中,一些特殊字符應該進行 HTML 實體轉義。
常見的有:&(and)、"(雙引號)、'(單引號)、<(小於號)、>(大於號),這些在 (x)HTML 文檔內容中應該分別轉換成:&、"、'、< 和 >。
但是問題就來了,為什么上面單引號的轉義和別的特殊字符不同呢?為什么唯獨單引號用的是實體編號('),而其它的用的是實體名稱(')呢?
原因就是 IE 瀏覽器暫時不支持單引號的實體名稱,IE 瀏覽器暫時只支持單引號的實體編號。
這也是 PHP htmlspecialchars 函數把單引號轉義成 ',而不是 ' 的原因。
另外,百度也不支持單引號的實體名稱,這個是我在我的博客在百度搜索結果中看出來的(現在我已經把單引號改成實體編號的形式了)。
這里可以查看 HTML 的所有特殊字符的實體編號和實體名稱。
Character Entity Number Entity Name Description " " " quotation mark ' ' ' (does not work in IE) apostrophe & & & ampersand < < < less-than > > > greater-than