Php 如何消除ajax调用中的多个不可见/特殊字符?
我正在对一个PHP文件使用ajax调用,该文件包含以下代码:Php 如何消除ajax调用中的多个不可见/特殊字符?,php,jquery,ajax,string,hex,Php,Jquery,Ajax,String,Hex,我正在对一个PHP文件使用ajax调用,该文件包含以下代码: echo str_replace(array("\x1e", "\x1c"), "", file_get_contents('http://www.domain.com/getJsonDocuments?categoryBranch='.intval($_GET['category']))); 现在的问题是,在这些JSON文档中,有许多不可见或特殊的字符,而不仅仅是上面代码中的两个字符,我已经用str_替换了它们: 数组(“\x1e
echo str_replace(array("\x1e", "\x1c"), "", file_get_contents('http://www.domain.com/getJsonDocuments?categoryBranch='.intval($_GET['category'])));
现在的问题是,在这些JSON文档中,有许多不可见或特殊的字符,而不仅仅是上面代码中的两个字符,我已经用str_替换了它们:
数组(“\x1e”、“\x1c”)
如果不替换它们,则会触发ajax调用的错误函数:
$.ajax({
type: 'GET',
url: 'jsonrequestCategory.php',
dataType: 'json',
success: function(data) {
console.log('success');
},
error: function() {
console.log('error');
}
});
所以我的问题是:
有没有办法摆脱所有这些角色?还是我需要检查每个文档和每个字符以避免出错 您需要在服务器端使用regex
$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);
()JSON支持UTF-8,但不支持二进制数据(例如:msgpack支持)。但是,您可以使用base64对二进制数据进行编码(结果是一个字符串)并在响应中使用它 在PHP中,您可以使用:
base64_encode(...)
window.atob(...)
在几乎所有主要的网络浏览器(IE<10除外)中,您都可以使用:
base64_encode(...)
window.atob(...)
请注意,您的浏览器可能也无法显示非UTF-8字符。使用
preg\u replace
和一组正则表达式,您也可以替换所有控制字符
$content = file_get_contents('http://www.domain.com/getJsonDocuments?categoryBranch='.intval($_GET['category']));
$content = preg_replace('/[[:cntrl:]]/', '', $content);
[:cntrl::
将匹配控制字符。在JSON服务器端编码不会删除这些特殊字符???JSON服务器来自客户。我更喜欢先在代码中“修复”这一点。如果没有其他方法,我会告诉客户去掉这些字符。你确实做了base64\u编码(file\u get\u contents(…)
,对吗?你也可以使用一些额外的代码来支持IE7(参见)是的,我做了。不起作用。您的JS解决方案可能是一种方式,我会看一看,但如果可能的话,我更喜欢PHP解决方案。无论如何谢谢哦是的。。。好像就是这样!我会检查一切并尽快接受。谢谢