PHP base64编码的响应在Javascript中无法正确解码

时间:2013-10-03 14:39:30

标签: javascript php jquery encoding base64

美好的一天! 我想知道为什么我无法使用atob或btoa或自定义公式(如$ .base64.decode())解码javascript中的base64响应。

这就是我在php中所拥有的

$res = "Это тескт";
echo base64_decode($res);

这就是我在jquery中所拥有的

$.ajax({
type: "GET",
url: "request.php",
success: function(data){
$('#elementid').html($.base64.decode(data));
//or $('#elementid').html(atob(data)); // it gives the same result as the above one.

在页面上,我看到以下

ЭÑо ÑеÑкÑ

Base64编码数据看起来如下

0K3RgtC+INGC0LXRgdC60YI=

如果我尝试使用从BASE64到UTF-8的不同网络工具进行解码,我会看到正确的结果,但不能在我的页面上使用上述功能。请建议。

更新:@ logic-unit感谢您的建议。我忘了提到结果页面index.php在标题

中有以下内容
<?php
header('Content-Type: text/html; charset=utf-8');
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
...
</head>

2 个答案:

答案 0 :(得分:1)

我找到了问题的答案。似乎atob和btoa严重处理UTF-8编码。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding中对此进行了描述 “Unicode问题”部分的解决方案2对我来说效果很好。

解决方案#2 - 使用TypedArrays和UTF-8重写atob()和btoa()

答案 1 :(得分:0)

听起来像是您网页上的字符编码问题。

确保HTML头中的元标记中指定了正确的编码类型。

http://www.w3.org/International/questions/qa-html-encoding-declarations