Eckel's world

          The program should be extensible and reusable.
          隨筆 - 3, 文章 - 0, 評(píng)論 - 2, 引用 - 0
          數(shù)據(jù)加載中……

          對(duì)javascript特殊字符的處理

          對(duì)javascript特殊字符的處理
          作者:eckel_cn
           
          javascript和JAVA一樣,一些特殊字符需要轉(zhuǎn)義
           
          特別是在一些JSP網(wǎng)頁(yè)的開發(fā)中,好多程序員經(jīng)常會(huì)忘掉這點(diǎn),
          例:
          1 <% List textList = (List)request.getAttribute("textList"); %>
          2 <script>
          3 <!--
          4 var txtList = new Array();
          5 <% for ( int i = 0 ; i < textList.size() ; i++) { %>
          6 txtList[<%=i%>= "<%=textList.get(i)%>";
          7 <% } %>
          8 -->
          9 </script>
           
          這段JS就存在問(wèn)題,未對(duì)特殊符號(hào)進(jìn)行處理.有特殊符號(hào)的情況下有可能報(bào)JSERROR
           
          JAVASCRIPT中需要轉(zhuǎn)義的有:
           
          轉(zhuǎn)義序列 字符
          \b 退格
          \f 走紙換頁(yè)
          \n 換行
          \r 回車
          \t 橫向跳格 (Ctrl-I)
          \' 單引號(hào)
          \" 雙引號(hào)
          \\ 反斜杠

          此外,對(duì)/符號(hào)我覺(jué)得也有必要進(jìn)行處理,因?yàn)橄?--></script> 這樣的字符串也會(huì)使SCRIPT出錯(cuò).
           
          下面提供一個(gè)比較實(shí)用java的方法,做這個(gè)特殊符號(hào)的處理:
           1public class JavaScriptUtils {
           2 public static String javaScriptEscape(String input) {
           3  if (input == null{
           4   return input;
           5  }

           6  StringBuffer filtered = new StringBuffer(input.length());
           7  char prevChar = '\u0000';
           8  char c;
           9  for (int i = 0; i < input.length(); i++{
          10   c = input.charAt(i);
          11   if (c == '"'{
          12    filtered.append("\\\"");
          13   }

          14   else if (c == '\'') {
          15    filtered.append("\\'");
          16   }

          17   else if (c == '\\'{
          18    filtered.append("\\\\");
          19   }

          20   else if (c == '\t'{
          21    filtered.append("\\t");
          22   }

          23   else if (c == '\n'{
          24    if (prevChar != '\r'{
          25     filtered.append("\\n");
          26    }

          27   }

          28   else if (c == '\r'{
          29    filtered.append("\\n");
          30   }
           else if (c == '\f'{
          31                filtered.append("\\f");
          32  }
           else if (c == '/'{
          33                filtered.append("\\/");
          34            }

          35   else {
          36    filtered.append(c);
          37   }

          38   prevChar = c;
          39  }

          40  return filtered.toString();
          41 }

          42}
          43


          上面的例子應(yīng)改為:
          1 <% List textList = (List)request.getAttribute("textList"); %>
          2 <script>
          3 <!--
          4 var txtList = new Array();
          5 <% for ( int i = 0 ; i < textList.size() ; i++) { %>
          6 txtList[<%=i%>= "<%=JavaScriptUtils.javaScriptEscape(textList.get(i))%>";
          7 <% } %>
          8 -->
          9 </script>

          posted on 2005-11-18 17:25 eckelcn 閱讀(7325) 評(píng)論(2)  編輯  收藏 所屬分類: HTML&JavaScript

          評(píng)論

          # re: 對(duì)javascript特殊字符的處理  回復(fù)  更多評(píng)論   

          請(qǐng)問(wèn)你的程序是怎么嵌入網(wǎng)頁(yè)的?
          2007-04-28 16:20 | www

          # re: 對(duì)javascript特殊字符的處理  回復(fù)  更多評(píng)論   

          直接放入JSP頁(yè)面咯。。
          2007-12-21 13:31 | Adng

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 抚远县| 宿迁市| 仁化县| 阳信县| 弥渡县| 大田县| 孝义市| 聂荣县| 和平县| 江川县| 湾仔区| 平顶山市| 和龙市| 凭祥市| 榆树市| 连云港市| 静乐县| 西盟| 卢龙县| 青河县| 奉节县| 会昌县| 阿克| 永靖县| 临沂市| 鸡泽县| 云梦县| 天祝| 松滋市| 丘北县| 扶余县| 马尔康县| 嘉荫县| 双流县| 宜兰市| 阿勒泰市| 安多县| 青铜峡市| 依安县| 莱阳市| 临颍县|