首页 > 解决方案 > 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/进行比较,它在输入中输出并显示",它还删除所有+标志

如何使输入和输出都匹配相同?

标签: javascriptphp

解决方案


我使用的,如果我错了/更快的方式,请纠正我,它编码,通过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


推荐阅读