我在Javascript中具有以下编码功能:

function b64EncodeUnicode(str) {
    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
        return String.fromCharCode('0x' + p1);
    }));
}


如何在PHP下解码?

我试过了:

htmlspecialchars_decode(base64_decode($str));


但是我得到了一个折旧的字符,例如:

�]��\��H���


你能建议一个解决方案吗?

编码的html代码示例:

<div class="pattern">
  <div class="gbody"></div>
  <div class="eyes">
    <div class="eye left"></div>
    <div class="eye right"></div>
  </div>
  <div class="mouth"></div>
  <div class="wave"></div>
  <div class="gshadow"></div>
</div>


javascript返回:

CiAgPGRpdiBjbGFzcz0iZ2JvZHkiPjwvZGl2PgogIDxkaXYgY2xhc3M9ImV5ZXMiPgogICAgPGRpdiBjbGFzcz0iZXllIGxlZnQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iZXllIHJpZ2h0Ij48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJtb3V0aCI PC9kaXY CiAgPGRpdiBjbGFzcz0id2F2ZSI PC9kaXY CiAgPGRpdiBjbGFzcz0iZ3NoYWRvdyI PC9kaXY CjwvZGl2Pg==


这是Javascript中的解码功能:

function b64DecodeUnicode(str) {
    return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
    }).join(''));
}


编辑:

带有汉字的str

CiAgPGRpdiBjbGFzcz0iZ2JvZHkiPjwvZGl2PgogIDxkaXYgY2xhc3M9ImV5ZXMiPgogICAg5Lq65rCR6ZOB6YGT572R5piv55Sx5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu96ZOB6YGT6YOo5pS/5rK76YOo5a6j5Lyg6YOo5Li7566h44CB5Lq65rCR6ZOB6YGT5oql56S+5Li75Yqe44CB5oOf5LiA6I635b6X5Zu95Yqh6Zmi5paw6Ze75Yqe5om55YeG55qE5YW35pyJ5paw6Ze75Y+R5biD6LWE6LSo55qE6ZOB6Lev6KGM5Lia572R56uZ77yM5Lq65rCR6ZOB6YGT572R56uL6Laz6ZOB6LevCiAgICA8ZGl2IGNsYXNzPSJleWUgbGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJleWUgcmlnaHQiPjwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9Im1vdXRoIj48L2Rpdj4KICA8ZGl2IGNsYXNzPSJ3YXZlIj48L2Rpdj4KICA8ZGl2IGNsYXNzPSJnc2hhZG93Ij48L2Rpdj4KPC9kaXY

注意:我的项目中需要Javascript编码功能。

最佳答案

base64_decode就足够了。您的问题是(可能)如何将js-base64编码的字符串发送到php。

b64EncodeUnicode无法返回以下内容:


  CiAgPGRpdiBjbGFzcz0iZ2JvZHkiPjwvZGl2PgogIDxkaXYgY2xhc3M9ImV5ZXMiPgogICAgPGRpdiBjbGFzcz0iZXllIGxlZnQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iZXllIHJpZ2h0Ij48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJtb3V0aCI
  PC9kaXY CiAgPGRpdiBjbGFzcz0id2F2ZSI PC9kaXY
  CiAgPGRpdiBjbGFzcz0iZ3NoYWRvdyI PC9kaXY CjwvZGl2Pg ==


你看到空间了吗? b64EncodeUnicode可能返回了以下内容:


  CiAgPGRpdiBjbGFzcz0iZ2JvZHkiPjwvZGl2PgogIDxkaXYgY2xhc3M9ImV5ZXMiPgogICAgPGRpdiBjbGFzcz0iZXllIGxlZnQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iZXllIHJpZ2h0Ij48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJtb3V0aCI + PC9kaXY + CiAgPGRpdiBjbGFzcz0id2F2ZSI + PC9kaXY + CiAgPGRpdiBjbGFzcz0iZ3NoYWRvdyI + PC9kaXY + CjwvZGl2Pg ==


您需要做什么来解决您的问题?例如,如果将其传递到php页面的querystring中,则应对其进行url编码。您可以使用encodeURIComponent来完成。

关于javascript - 用PHP解码Javascript base64 unicode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40708334/

10-09 20:14