javascript - 使用 PHP 解码回 Javascript base64 unicode

标签 javascript php unicode

我在 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 包含汉字:<​​/p>

CiAgPGRpdiBjbGFzcz0iZ2JvZHkiPjwvZGl2PgogIDxkaXYgY2xhc3M9ImV5ZXMiPgogICAg5Lq65rCR6ZOB6YGT572R5piv55Sx5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu96ZOB6YGT6YO o5pS/5RK76YOo5a6j5Lyg6YOo5Li7566h44CB5Lq65rCR6ZOB6YGT5oql56S+5Li75Yqe44CB5oOf5LiA6I635b6X5Zu95Yqh6Zmi5paw6Ze75Yqe5om55YeG55qE5YW35pyJ5paw6Z e75Y+R5biD6LWE6LSo55qE6ZOB6Lev6KGM5Lia572R56uZ77yM5Lq65rCR6ZOB6YGT572R56uL6Laz6ZOB6LevCiAgICA8ZGl2IGNsYXNzPSJleWUgbGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNz PSJleWUgcmlnaHQiPjwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9Im1vdXRoIj48L2Rpdj4KICA8ZGl2IGNsYXNzPSJ3YXZlIj48L2Rpdj4KICA8ZGl2IGNSYXNzPSJnc2hhZG93Ij48 L2Rpdj4KPC9kaXY

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

最佳答案

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

b64EncodeUnicode 无法返回此:

CiAgPGRpdiBjbGFzcz0iZ2JvZHkiPjwvZGl2PgogIDxkaXYgY2xhc3M9ImV5ZXMiPgogICAgPGRpdiBjbGFzcz0iZXllIGxlZnQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iZXllIHJpZ2h0Ij48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJtb3V0aCI PC9kaXY CiAgPGRpdiBjbGFzcz0id2F2ZSI PC9kaXY CiAgPGRpdiBjbGFzcz0iZ3NoYWRvdyI PC9kaXY CjwvZGl2Pg==

你看到空格了吗? b64EncodeUnicode 可能返回的是这个:

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

您需要做什么来解决您的问题?例如,如果您将其传递到 php 页面的查询字符串内,则应该对其进行 url 编码。您可以使用 encodeURIComponent 来完成此操作。

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

相关文章:

javascript - 为什么我把 .js 文件分开了就不能输入任何字母?

javascript - ES6 Promises.all() 不全部执行(promises 中没有捕获到错误)

javascript - 在计算 javascript 代码中不同输出的迭代次数时遇到问题

php - Chronoforms 显示当前登录用户创建的 "Client Details"列表

php - 根据位置选择产品的 MySQL 查询

javascript - anchor 标记 onclick 不起作用

php - 我如何优化这些查询?

java - 如何在 Java 中获取 unicode 字符的十进制值?

Python——Unicode字符串中的ASCII编码字符串;如何删除 'u' ?

php - 使用 PDO 通过 PHP 保存到 mysql 时字符串发生变异