在jsp編寫中經常會在頁面上使用變數直接輸出(eg.<%=userName%>),有時是為了顯示資訊,有時作為js參數提供,有時用於拼裝url。由於html語言自身的逸出字元的存在,變數的直接輸出會導致頁面顯示不正常,或js語法錯誤,或url錯誤,本文討論這一問題的分析和解決,同時探討struts架構對這一問題的解決方案,希望對其他類似問題的解決有所啟發。
Html:
< escape sequence for <
> escape sequence for >
& escape sequence for &
" escape sequence for “
JavaScript:
Url:
Struts的解決方案:
附:
public class PageUtil { /** * genarate escape sequance in html for special str * @see HTML 4.01 Specification 5.3.2 Character entity references */ public static String escape4html(String str){ StringBuffer sb = new StringBuffer(); for(int i=0;i<str.length();i++){ char c = str.charAt(i); if(c =='"') sb.append("""); else if(c =='<') sb.append("<"); else if(c =='>') sb.append(">"); else sb.append(c); } return sb.toString(); } /** * genarate escape sequance in javascript for special str * @see JavaScript Language 1.1 Specification 2.7.5 Escape Sequences for String Literals */ public static String escape4js(String str){ StringBuffer sb = new StringBuffer(); for(int i=0;i<str.length();i++){ char c = str.charAt(i); if(c =='/'') sb.append("///'"); else if(c =='"') sb.append("///""); else sb.append(c); } return sb.toString(); } public static void main(String[] args) { }}