javascript - UTF-8 使用 Ajax 将数据从 Javascript 传递到 PHP
问题描述
我在为从 Javascript 到 PHP 然后返回到 Javascript 的输入和输出的相同匹配制定正确的组合时遇到问题
Javascript 编码: (textarea=input1) => 输出到 (textarea=input2)
btoa(unescape(encodeURIComponent(document.querySelector('.input1').value)));
PHP 解码: (textarea=input2) => 输出到 (textarea=input3)
htmlspecialchars(SQLite3::escapeString(base64_decode($_POST['input2'])));
PHP 编码: (textarea=input3) => 输出到 (textarea=input4)
base64_encode(htmlspecialchars(urldecode(($d['data']))));
Javascript 解码: (textarea=input4) => 输出到 (textarea=input5)
decodeURIComponent(escape(atob(document.querySelector('.input4').value)));
但它们不匹配,我使用https://text-compare.com/进行比较,它在输入中输出并显示"
,它还删除所有+
标志
如何使输入和输出都匹配相同?
解决方案
我使用的,如果我错了/更快的方式,请纠正我,它编码,通过ajax传递给php,解码,编码,通过ajax传递回js响应,然后最终解码,从输入到输出的匹配甚至是相同的带有表情符号
我发布下面的方法来帮助与我处于相同情况的任何人
Method was
JS Encode: url > btoa
PHP Clean: ' ' > '+'
PHP Decode: json > base64 > url
PHP Encode: url > base64 > json
JS Decode: json > atob > url
JS Page:
Encode to pass through AJAX to PHP :
//create the json objects
var obj = {"data":{}};
//add data
obj['data'][0] = window.btoa(encodeURIComponent((data)));
Decode from PHP through AJax
//parse json
var json = JSON.parse(xhr.responseText);
//decode
var x = (decodeURIComponent(window.atob(json.data[0])));
Ajax Header: Post
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
PHP Page:
Decode:
//clean post
$clean = strtr($_POST["x"], ' ', '+');
//decode json
$obj = json_decode($clean, true);
//decode javascript post
$decode['data']['0'] = rawurldecode(base64_decode($obj['data'][0]));
Encode:
//encode javascript post
$encode['data']['0'] = base64_encode(rawurlencode($decode['data'][0]));
//encode json
echo json_encode($encode);
我从这个页面得到的帖子的清洁使用 PHP 的 JavaScript atob 操作
我从这个页面得到的 rawurl等效于 javascript escape/unescape
推荐阅读
- angular - 无法在组件内设置类的值
- javascript - IndexedDB:调用 onUpgradeNeeded 时从 JSON 文件加载数据
- javascript - 如何导出车把文件以及如何将其导入 JS 文件
- c - 使用UDP协议传输文件
- postgresql - 如何处理 Hasura 中的复杂权限
- html - “什么是charset 属性,为什么 HTML5 不支持它?”
- javascript - Mark js 标记取消用户选择
- python - 为什么没有 main 函数时 sys.settrace 不触发?
- database - 为什么使用 B 树作为 AVL 树以外的数据库索引
- mysql - Sequelize - 匹配 mySQL 数据库中给定实体的所有记录