2011-02-23 81 views
1

我發送特殊字符到服務器的消息,因爲服務器不能處理特殊字符,它與如何檢查JSON是否可以解析數據

</style> 
</head> 
<body> 
    <div id="content"> 
     <h1>An Error Was Encountered</h1> 
     <p>The URI you submitted has disallowed characters.</p> </div> 
</body> 
</html> 

回答我的應用程序是通過拋出異常崩潰JSON解析器

JSON_FAIL(JSON_TEXT("Not JSON!")); 
throw std::invalid_argument(EMPTY_STRING2); 

是否可以檢查郵件是否有效或無效發送請求到server.So之前,我可以把警報「無效信息」用戶任何其他方式來解析錯誤我ssage(「遇到錯誤」)並在解析之前顯示警報。

回答

1

既然它拋出了一個異常......我只是把解析方法放在try塊和catch塊我顯示了一個警報。

0

如果使用jQuery,可以使用parseJSON函數在數據發送到服務器之前對其進行測試。

var obj = jQuery.parseJSON('{"name":"John"}');<br/> 
alert(obj.name === "John"); 

http://api.jquery.com/jQuery.parseJSON/

+0

我不使用jQuery ...我使用libJSON解析數據 –

+0

這是不正確的。 $ .parseJSON()不測試字符串,它解析它。如果字符串無效,則會拋出異常。我想如果你把它放在try/catch塊中,理論上可以用它來測試,但是這種方法不是字符串有效性的測試器。 – Jason

0

剛剛嘗試url_encode你發送消息。或者用自己的算法編碼該消息,該算法將用它的十六進制表示法替換每個消息符號(如「Hello!」 - >「48656c6c6f21」),但消息大小將增加一倍。 然後,如果您使用自己的編碼方法,則必須在服務器端解碼消息,url_encoded數據將自動解碼。 此外,你必須在嘗試解析它之前檢查響應文本。只需檢查是否以「」文本開頭。 最後,以測試無效字符環通串字符和測試字符串,它們不包含在禁止字符的字符串,像水木清華

array<Byte> strchars = new array<Byte>(255); 
str.GetBytes(strchars, 0, str.length); 
string dch = "<>@#%^&`\\'\""; 
bool invalid = false; 
for (i=0;i<str.length;i++) if (dch.IndexOf(strchars[i]) >= 0) {invalid = true; break; } 

附:我不是英語母語的人,不熟悉Objective C,所以不要評價我很多:D

+0

不錯的想法..但我不想增加大小,也不能在服務器端更改,因爲有許多其他應用程序已經使用此服務器。 –