當JSON字符串中含有未知字符時,會致使頁面顯示不出來。這在開發時很常見啊。html
今天俺就遇到了。線上BUG,顯示不出來,問題就在於,這個字符串有多是從其它地方copy過來的。前端
首先,把線上本應顯示出來的數據還原到本地後,一條條地排查,一百二十幾條,裏頭有二十幾條數據都是這個緣由啊。咯,就是下面NotePad裏顯示的這個東西啊。就是這個玩意兒,致使頁面數據顯示不出來的。數據庫
如今把今天找出這個罪魁禍首的方法記下來,但願你們遇到這樣的問題也能夠嘗試一下,看能不能解決。dom
首先,找出未知字符。頁面展現的數據源是數據庫,好,先把數據庫裏的數據查出來,複製到eclipse裏(不得不說,eclipse太強大了,當數據量過大,不能所有複製到編輯器裏時候,先嚐試着複製到eclipse裏,再弄到編輯器裏吧(*^__^*) )。當複製到NotePad裏的時候,上面這種的就顯示出來了,不過在數據庫裏是顯示不出來的,這就是看不見的未知字符啦。另外,我也嘗試了一下,EditPlus並不能把這些看不見的字符顯示出來,成上面的樣子哦。eclipse
然而,待俺把數據這個數據所有替成空,提交完寫好SQL腳本後,我就想,這個看不見的字符底是個啥玩意兒呢?由於前端用的Extjs,因此,固然是去翻翻看,關於String字符串的處理方法咯。偶試過編輯器
1.Ext.String.htmlEncode(value); 編碼字符串,對其中特殊字符進行轉義編碼
Ext.String.htmlEncode("hello'world"); //"hello'world"
2.Ext.String.htmlDecode(value); 解碼字符串,對其中的轉義字符進行還原spa
Ext.String.htmlDecode("hello'world"); //"hello'world"
然而並不起什麼用。code
試過用正則去匹配上面看不見的字符,還試着加轉義字符。仍是沒有用啊。。。。。htm
因而,我跟領導提議,禁用粘貼功能吧。我代碼都寫好啦~~~
var context_dom = Ext.select('textarea[name=msgOnlineVo.msgOnlineDto.remarks]');//獲取dom對象
context_dom.on('paste',function(e){//禁止粘貼
console.log('no paste');
e.stopEvent();
});
context_dom.on('copy',function(e){ //禁止複製
console.log('no copy');
e.stopEvent();
});
context_dom.on('contextmenu',function(e){ //禁止右鍵
console.log('no contextmenu');
e.stopEvent();
})
領導拒絕了,文本框不能粘貼,用戶會罵人的/(ㄒoㄒ)/~~。不行不行。但是我又不想,每次去排查啊。那麼,懶人有懶招了。我必定要把這個害人的字符揪出來。裏面的方法我都試了一遍啊,試到了這兩個方法,Unicode code,看來這兩個有點用。
好,把上面那串字符串裏,那個特殊字符所在的位揪出來,看看在unicode code是多少。哼~~~
特殊字符替換爲空白後,再複製到NotePad裏看看,個人乖乖,沒問題了。特殊字符處理掉了。
至此,大功告成,不再用擔憂被用戶罵了~~~~~~~~