【问题标题】:UTF-8 Passing Data from Javascript to PHP with AjaxUTF-8 使用 Ajax 将数据从 Javascript 传递到 PHP
【发布时间】:2020-08-09 21:25:01
【问题描述】:

我在为从 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/ 进行比较,它在输入中输出并显示",它还删除所有+ 符号

如何让输入和输出同时匹配?

【问题讨论】:

  • 为何如此复杂?为什么需要同时进行 URI 编码、Base64 和 HTML 转义?
  • 目前尚不清楚您如何准确传递该数据,但至于严格使用的数据格式,我认为您对 json 有更多的运气。在 PHP 中是 json_encode 和 json_decode,在 Javascript 中是 JSON.stringify 和 JSON.parse。如果您的目标是隐藏它,您仍然可以选择base64。但这将比您当前正在执行的所有转义更可靠。旁注,可能是您在 PHP 端缺少的 ENT_QUOTES 参数。
  • 我通过 Ajax 传递它,我得到 Latin1 超出范围,它正在 json 中传递,它的编码是问题
  • 哦,我明白你在说什么了。在这种情况下,你的解决方案是 PHP 中的mb_convert_encoding。
  • 我应该把它放在哪个部分?

标签: javascript php


【解决方案1】:

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

我从这个页面得到的帖子的清洁JavaScript atob operation using PHP

我从这个页面得到的rawurlPHP equivalent for javascript escape/unescape

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2014-10-21
    • 2019-11-16
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多