【问题标题】:How to get rid of multiple invisible/special chars for ajax call?如何摆脱 ajax 调用的多个不可见/特殊字符?
【发布时间】:2014-01-20 23:49:12
【问题描述】:

我正在对包含以下代码的 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');
            }
        });

所以我的问题是:

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

【问题讨论】:

  • 在 JSON 服务器端编码不会删除这些特殊字符???
  • JSON 服务器来自客户。我更喜欢先在我的代码中“修复”这个问题。如果没有其他方法,我会告诉客户摆脱这些字符。

标签: php jquery ajax string hex


【解决方案1】:

使用preg_replace 和一组正则表达式,您也可以替换所有控制字符。

$content = file_get_contents('http://www.domain.com/getJsonDocuments?categoryBranch='.intval($_GET['category']));
$content = preg_replace('/[[:cntrl:]]/', '', $content);

[:cntrl:] 将匹配控制字符。

【讨论】:

  • 哦,是的……好像就是这样!生病检查一切并尽快接受。谢谢
【解决方案2】:

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

在 PHP 中你可以使用:

base64_encode(...)

在几乎所有主要的网络浏览器(IE

window.atob(...)

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

【讨论】:

  • 你确实做到了base64_encode(file_get_contents(...)),对吧?您也可以使用一些额外的代码来支持 IE 7(请参阅stackoverflow.com/a/246813/130580
  • 是的,我做到了。不工作。您的 JS 解决方案可能是一种方式,我会看看它,但如果可能的话,我更喜欢 PHP 解决方案。还是谢谢
【解决方案3】:

您需要在服务器端使用正则表达式。

$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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多