我在PHP文件上使用ajax调用,该文件包含以下代码:
echo str_replace(array("\x1e", "\x1c"), "", file_get_contents('http://www.domain.com/getJsonDocuments?categoryBranch='.intval($_GET['category'])));
现在的问题是,在那些JSON文档中,有许多不可见或特殊的字符,不仅是你在上面的代码中看到的两个,我已经str_replace:
数组(“\ x1e”,“\ x1c”)
如果我不替换它们,则会触发ajax调用的错误功能:
$.ajax({
type: 'GET',
url: 'jsonrequestCategory.php',
dataType: 'json',
success: function(data) {
console.log('success');
},
error: function() {
console.log('error');
}
});
所以我的问题是:
有没有办法以某种方式摆脱所有这些角色?或者我是否需要检查每个文档和每个字符以避免出错?
答案 0 :(得分:2)
使用preg_replace
和一组正则表达式,您也可以替换所有控制字符。
$content = file_get_contents('http://www.domain.com/getJsonDocuments?categoryBranch='.intval($_GET['category']));
$content = preg_replace('/[[:cntrl:]]/', '', $content);
[:cntrl:]
将匹配控制字符。
答案 1 :(得分:0)
您需要在服务器端使用正则表达式。
$subject = "abcdef";
$pattern = '/[\xA0\x00-\x09\x0B\x0C\x0E-\x1F\x7F]+(.+)[\xA0\x00-\x09\x0B\x0C\x0E-\x1F\x7F]+(.+)/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
答案 2 :(得分:0)
JSON确实支持UTF-8,但它不支持二进制数据(例如:msgpack确实如此)。但是,您可以使用base64(生成字符串)对二进制数据进行编码,并在响应中使用它。
在PHP中,您可以使用:
base64_encode(...)
在几乎所有主要的Web浏览器中(除了IE< 10),您都可以使用:
window.atob(...)
请注意,您的浏览器可能无法显示非UTF-8字符。