有时mb_convert_encoding不起作用:未捕获的 URIError:URI 格式不正确

mb_convert_encoding not working sometimes: Uncaught URIError: URI malformed

提问人:Ethane 提问时间:12/19/2018 最后编辑:Rory McCrossanEthane 更新时间:12/19/2018 访问量:260

问:

mb_convert_encoding()如果与 PHP 和 jQuery AJAX 一起使用,则不适用于西里尔字符和其他特殊字符。错误如下:

未捕获的 URIError:对象处的 decodeURIComponent ()
处的 URI 格式
不正确。(流行:3725)
在 u (jquery-3.3.1.min.js:12) 在 Object.fireWith [as resolveWith] (jquery-3.3.1.min.js:12) 在 k (jquery-3.3.1.min.js:12)


在 XMLHttpRequest。(jquery-3.3.1.min.js:12)

我的问题是我是否需要在jQuery中解码响应值。

$str = 'Hello Frèdèrï, How are you.';
$response = mb_convert_encoding($str, 'UTF-8', 'auto');
$this->json_render($response);
$.ajax({
  url: 'page.php?page=' + page,
  type: "get",
  timeout: 30000,
  tryCount: 0,
  retryLimit: 3,
  beforeSend: function () {
    $('.ajax-load').show();
    $('.load-more').hide();
  },
}).done(function (data) {
  if ($.trim(data) == "") {
    last_page = true;
    $('.ajax-load').hide();
    $('.no-data-found').show();
    return;
  }
  $('.ajax-load').hide();
  $('.load-more').show();
  var content = $(decodeURIComponent(data));
  $grid.append(content).masonry('appended', content);
  $("img.lazyload").myLazyLoad();
  $('.modal').modal();
  loadAddThis();
})
JavaScript PHP jQuery decodeUriComponent MB-convert-编码

评论

0赞 Rory McCrossan 12/19/2018
返回的确切值是多少?另请注意,这与jQuery无关,所以我也添加了“javascript”标签。data$responsedecodeURIComponent
0赞 Ethane 12/19/2018
$response包含编码的字符串,这不是问题。我的问题是我是否需要在我的 Ajax 代码中解码此响应。我正在使用它 - var content = $(decodeURIComponent(data));
0赞 Rory McCrossan 12/19/2018
这取决于值的格式,这就是我要求查看它的原因。如果它包含特殊字符并且您已经对其进行编码,那么是的,您需要对其进行解码(例如:jsfiddle.net/Lubosxd9)。否则你不会。
0赞 Ethane 12/19/2018
@RoryMcCrossan,感谢您的快速回复。函数 mb_convert_encoding() 在循环中使用,因此包含特殊字符的字符串很少,而不是所有字符串。那么我如何检测哪个字符串需要编码
0赞 Rory McCrossan 12/19/2018
好的,在这种情况下,您最好将它们全部编码并在客户端解码 - 就像您目前所做的那样。那么问题就变成了为什么不喜欢你提供值的格式。同样,我们需要看到一个抛出此错误的示例才能对其进行调试。decodeURIComponent()data

答: 暂无答案