如何摆脱ajax调用的多个不可见/特殊字符?

时间:2014-01-03 10:24:49

标签: 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_replace:

  

数组(“\ x1e”,“\ x1c”)

如果我不替换它们,则会触发ajax调用的错误功能:

$.ajax({
            type: 'GET',
            url: 'jsonrequestCategory.php',
            dataType: 'json',
            success: function(data) {
                console.log('success');
            },
            error: function() {
                console.log('error');
            }
        });

所以我的问题是:

有没有办法以某种方式摆脱所有这些角色?或者我是否需要检查每个文档和每个字符以避免出错?

3 个答案:

答案 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);

http://webcheatsheet.com/php/regular_expressions.php

答案 2 :(得分:0)

JSON确实支持UTF-8,但它不支持二进制数据(例如:msgpack确实如此)。但是,您可以使用base64(生成字符串)对二进制数据进行编码,并在响应中使用它。

在PHP中,您可以使用:

base64_encode(...)

在几乎所有主要的Web浏览器中(除了IE< 10),您都可以使用:

window.atob(...)

请注意,您的浏览器可能无法显示非UTF-8字符。