2013-06-24 104 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);