JSON.parse()解析該json字符串,特殊字符串引起報錯


主要的特殊字符:英文(半角)狀態的 單引號 ‘ 雙引號"  斜杠 \  反斜杠 /  and符號&   大於號 >  小於號 <   空格 

9個特殊符號,可以采取錄入的時候進行控制,禁止輸入。或者在存入數據庫的時候進行轉義。或者從數據庫取出時候轉義。或者在頁面進行轉義替換等方案。

涉及到:特殊字符可能對  數據庫代碼 js造成錯誤。所以要考慮 數據庫特殊字符     編寫語言特殊字符   html頁面特殊字符等。

方案一、存入數據庫前對數據進行轉義  

json串中包含特殊的字符時,可用正則過濾,把特殊的字符改成對應的,存入數據庫

value.replace(/\&/g,"&amp;").

replace(/\"/g,"&quot;").

replace(/\'/g,"&#39;").

replace(/\</g,"&lt;").

replace(/\>/g,"&gt;")

原文鏈接:https://blog.csdn.net/liushuiziyouliu/article/details/76348830

方案二 從數據庫中取出json返回前台之前轉化: 

注意:對單引號這個方法不適用,單引號只能存數據庫之前進行轉義

public static String stringToJson(String s) {    
          StringBuffer sb = new StringBuffer ();     
          for (int i=0; i<s.length(); i++) {     
        
              char c = s.charAt(i);     
              switch (c) {     
              case '\"':     
                  sb.append("\\\"");     
                  break;     
//              case '\\':   //如果不處理單引號,可以釋放此段代碼,若結合下面的方法處理單引號就必須注釋掉該段代碼
//                  sb.append("\\\\");     
//                  break;     
              case '/':     
                  sb.append("\\/");     
                  break;     
              case '\b':      //退格
                  sb.append("\\b");     
                  break;     
              case '\f':      //走紙換頁
                  sb.append("\\f");     
                  break;     
              case '\n':     
                  sb.append("\\n"); //換行    
                  break;     
              case '\r':      //回車
                  sb.append("\\r");     
                  break;     
              case '\t':      //橫向跳格
                  sb.append("\\t");     
                  break;     
              default:     
                  sb.append(c);    
              }}
          return sb.toString();     
       }
java 單引號保存數據庫之前進行單獨的處理之后在保存數據庫:

public static String StringDanYinToJSON(String ors) {
           ors = ors == null ? "" : ors;
           StringBuffer buffer = new StringBuffer(ors);
           int i = 0;
           while (i < buffer.length()) {
            if (buffer.charAt(i) == '\'' || buffer.charAt(i) == '\\') {
             buffer.insert(i, '\\');
             i += 2;
            } else {
             i++;
            }
          }
           return buffer.toString();
     }

 

方案三  js解決辦法  使用JSON.parse()前  把特殊字符串進行替換

 

 

方案四、從數據庫取出后處理

在對數據庫取出來的數據(特別是描寫敘述信息)里面含有特殊字符的話。使用JSON.parse將json字符串轉換成json對象的時候會出錯,主要是雙引號,回車換行等影響明顯,左尖括號和右尖括號也會導致顯示問題,所以要在輸出到頁面進行json對象轉換之前將一些特殊符合進行編碼或轉義,以下展示的是C#代碼編碼和轉義幾個經常使用特殊字符。經過筆者測試,將這些符號編碼和轉義之后,大部分json字符串都能夠轉換成json對象了。假設遇到個別問題,應朝着這個方向去查找問題。

            theString = theString.Replace(">", "&gt;");
            theString = theString.Replace("<", "&lt;");
            theString = theString.Replace(" ", "&nbsp;");
            theString = theString.Replace("\"", "&quot;");
            theString = theString.Replace("\'", "&#39;");
            theString = theString.Replace("\\", "\\\\");//對斜線的轉義
            theString = theString.Replace("\n", "\\n");
            theString = theString.Replace("\r", "\\r");
注意:\r是回到行首。\n是新啟一行,這兩個一般同一時候出現,應該同一時候處理。

 

 

補充:文字中間的換行,空格在數據庫里面不以\r\n,&nbsp;;等形式顯示出來(“本書”與“前80”之間換行。“由”與“曹雪芹”之間空格)

文字:

 

 

 

數據庫:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM