Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何消除ajax调用中的多个不可见/特殊字符?_Php_Jquery_Ajax_String_Hex - Fatal编程技术网

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

我正在对一个PHP文件使用ajax调用,该文件包含以下代码:

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解决方案。无论如何谢谢哦是的。。。好像就是这样!我会检查一切并尽快接受。谢谢