今天在項目中遇到一個問題,頁面上的數據突然顯示不出來了,查驗后得知是Json數據出現了問題。使用JSON從后台向前台傳輸數據的時候,當數據本身含有一些特殊字符,會導致JSON數據的解析出錯。如果內容中本身就包含了 "\"" 雙引號、"\r\n" 回車換行這時候,數據的解析就會出現問題。
\r,\n,\r\n的區別
1
2
3
4
|
\n是換行,英文是New line,表示使光標到行首
\r是回車,英文是Carriage
return
,表示使光標下移一格
\r\n表示回車換行
|
"\r\n"與"</br>"的區別
1
2
|
\r\n是輸出的HTML代碼換行(查看html代碼時,代碼換行了)
<br />輸出給瀏覽器換行(看網頁效果時,文字換行了)
|
用戶在Textarea輸入內容時,有時候會輸入雙引號,回車或者換行符,保存時,這些特殊符號也也文本內容一起保存到數據庫里去了,當獲取這些數據時,Json的解析就會出錯
下面是有問題數據:
1
2
3
4
5
6
7
8
|
{
"employees"
: [
{
"firstName"
:
"Bill"
,
"lastName"
:
"Gates”"
},
{
"firstName"
:
"George
回車了"
,
"lastName"
:
"Bush"
},
{
"firstName"
:
"Thomas"
,
"lastName"
:
"Carter"
}
]
}
|
不改動數據數據,怎樣才能把數據傳到頁面上去呢。思路是后端把 \r\n(回車)轉成<br/>再,前端再把<br/>轉回 \r\n
C# 代碼:
1 public static string EncodeTextareaChar(string str) 2 { 3 if (str == null) return null; 4 return str.Replace("\"", "\\\"").Replace("\r\n", "<br/>").Replace("\n", "<br/>").Replace("\r", "<br/>"); 5 }
Javascript代碼
1 function encodeTextarea(str) { 2 str = str.replace(/</g, "<").replace(/>/g,">"); 3 var str = str.replace(/<br\/>/g, "\r\n"); 4 return str; 5 }
兩種語言都有 replace() 方法,他們也略微有些區別,
Javascript的 replace 只替換一次,如"abcaebacd"中有兩個c,它只替換第一個,replace("c","s"),結果是"absaebacd"
C#的replace替換全部,replace("c","s"),結果是"absaebasd"
注:Javascript 要想實現全部替換,可以 replace(/c/g,"s"), / /之間是要替換的內容,g為全局標志
1
2
3
|
為什么要加這一個呢?
str.replace(/</g,
"<"
).replace(/>/g,
">"
);
因為后端傳過來的 <br/> 變成了 <br/>
|