JSON資料的處理中的特殊字元,json資料特殊字元
JSON現在是很常見的處理資料的方式了。但由於自己使用的是反射擷取資料,必須自己處理特殊字元,但總是發現有一些看不見的字元在前台
var obj = jQuery.parseJSON(msg);會轉換失敗。
例如如下在Vs中可以看到只有兩個字元
可實際上卻有三個字元,使用notepad++開啟
一直不明白這些字元是如何進入資料庫的,但進入了,就必須處理,否則在前台就會轉換失敗,導致資料載入失敗。
很長時間以為是由於使用者複製了一些其他編碼的文字,在中文中沒有對應的編碼,導致的錯誤。這次又出現了,於是又仔細研究了一下,發現原來是ASCⅡ表中的控制字元!!
明白了這個處理自然就很簡單了。
後台反射轉化為JSON的代碼:
private static string getValue<T>(T t, string pname) where T : class { Type type = t.GetType(); PropertyInfo pinfo = type.GetProperty(pname); if (pinfo != null) { object v = pinfo.GetValue(t, null); return v != null ? v.ToString() : ""; } else { throw new Exception("不存在屬性" + pname); } } protected static string ConvertFromModeTojson<T>(T t, string columnInfos) where T : class { string[] cols = columnInfos.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); System.Text.StringBuilder sb = new System.Text.StringBuilder(300); string result = "{"; foreach (string col in cols) { string name = "\"{0}\":\"{1}\","; string value = getValue<T>(t, col); value = String2Json(value); sb.Append(string.Format(name, col, value)); } result += sb.ToString().TrimEnd(','); result += "}"; return result; } /// <summary> /// 過濾特殊字元 /// </summary> /// <param name="s"></param> /// <returns></returns> private static string String2Json(String s) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.Length; i++) { char c = s.ToCharArray()[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: if ((c >= 0 && c <= 31)||c ==127)//在ASCⅡ碼中,第0~31號及第127號(共33個)是控制字元或通訊專用字元 { } else { sb.Append(c); } break; } } return sb.ToString(); }
控制字元
怎處理JSON中的特殊字元
由於 Ajax 應用程式非常適合將純文字發送給伺服器端程式並對應地接收純文字,相比不能產生文本的 API,能產生文本的 API 自然更可取;而且,JSON 讓您能夠處理本地 JavaScript 對象,而無需為如何表示這些對象多費心思。XML 也可以提供文本方面的類似益處,但用於將 JavaScript 對象轉換成 XML 的幾個現有 API 沒有 JSON API 成熟;有時,您必須在建立和處理 JavaScript 對象時格外謹慎以確保所進行的處理能與所選用的 XML 會話 API 協作。但對於 JSON,情況就大不相同:它能處理幾乎所有可能的物件類型,並會返回給您一個非常好的 JSON 資料表示。 因此,JSON 的最大價值在於可以將 JavaScript 真的作為 JavaScript 而非資料格式語言進行處理。1. 斷行符號問題JSON傳值的時候,如果有斷行符號符就會掛的。我們可以使用正則來去掉斷行符號符:$str = preg_replace("'([\r\n])[\s]+'", "", $str);// 不用正則$str = str_replace("\n","",$str);轉出來的字串就沒有斷行符號符的困擾了。順便記錄一個PHP過濾指令碼:<?php// $document 應包含一個 HTML 文檔。// 本例將去掉 HTML 標籤,javascript 代碼// 和空白字元。還會將一些通用的// HTML 實體轉換成相應的文本。$search = array ("'<script[^>]*?>.*?</script>'si", // 去掉 javascript"'<[\/\!]*?[^<>]*?>'si", // 去掉 HTML 標籤"'([\r\n])[\s]+'", // 去掉空白字元
json格式怎讀取有特殊字元的資料內詳
這個是做介面服務端的要在字值的值處理成json之前就應當做轉義的動作,把欄位裡面的值 :冒號及反斜線\和,逗號統統加上\: \, \" \\ 這樣用戶端才會正確,以下列出來XML等的格式傳遞,也會存在相同的問題String s = "a:b,c";s.replace(":","\:").replace(",","\,");
javamessage.replaceAll("<","<").replaceAll(">",">");
html:& 變成 &< 變成 <> 變成 >" 變成 "pading:一般間隔10px
空格用 代替