2013-06-24 105 views
0

我正嘗試將document.sdf(json)發送到Amazon Cloud Search。非法Unicode字符

...sadad<br \/>\n;color:G\u0002% k\u0010>\u0001\b? X_? p>", ... 

這些都是從document.sdf由PHP腳本生成和json_encoded

:除非有一些特殊的字符

Found Unicode characters that are not legal for Cloud Search:\n Illegal Unicode character '\u0002'\n Illegal Unicode character '\u0010'\n Illegal Unicode character '\u0001'\n Illegal Unicode character '\b' 

錯誤出來這塊文字的一切工作正常

以上的原文:

;顏色:G%k>? X_? P>

+0

這些是控制字符,它們會在文本字符串中的任何原因? – datasage

+0

@datasage這來自用戶生成的內容列。如何逃脫控制角色? – quosal

+0

你可能應該刪除它們。應該能夠在生成文檔時使用正則表達式來檢測並刪除它們。 – datasage

回答

1

也許值得與像一個正則表達式去除所有從文本無效字符:

[^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF] 

但是當我遇到類似的問題,問題只是在於我沒在進行POST時不明確指定字符編碼,例如:

$curl = curl_init($cloudsearch_url); 
curl_setopt($curl, CURLOPT_HTTPHEADER, 
      array('Content-Type: application/json; charset=UTF-8')); //Defaults to ISO10646 (I think) without this 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); 
curl_exec($curl);