UTF-8使用Ajax将数据从Javascript传递到PHP

UTF-8使用Ajax将数据从Javascript传递到PHP,javascript,php,Javascript,Php,我在制定从Javascript到PHP再回到Javascript的输入和输出的相同匹配的正确组合时遇到了问题 Javascript编码:(textarea=input1)=>输出到(textarea=input2) btoa(unescape(encodeURIComponent(document.querySelector('.input1').value)) PHP解码:(textarea=input2)=>输出到(textarea=input3) htmlspecialchars(SQLi

我在制定从Javascript到PHP再回到Javascript的输入和输出的相同匹配的正确组合时遇到了问题

Javascript编码:(textarea=input1)=>输出到(textarea=input2)
btoa(unescape(encodeURIComponent(document.querySelector('.input1').value))

PHP解码:(textarea=input2)=>输出到(textarea=input3)
htmlspecialchars(SQLite3::escapeString(base64_解码($_POST['input2']))

PHP编码:(textarea=input3)=>输出到(textarea=input4)
base64_编码(htmlspecialchars(urldecode($d['data'])))

Javascript解码:(textarea=input4)=>输出到(textarea=input5)
decodeURIComponent(转义(atob(document.querySelector('.input4').value))

但它们不匹配,我用来比较,它以输入输出并显示
&;引用,它还删除所有
+
符号


如何获得相同的输入和输出匹配?

我使用的是,如果我错了,请纠正我/更快的方式,它编码,通过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);
我从这一页上得到的那篇文章的完整性


我从这个页面得到的rawurl

为什么如此复杂?为什么您需要同时使用URI编码、Base64和HTML转义?从这一点来看,我们不清楚您到底是如何传递数据的,但对于要使用的严格数据格式,我认为使用json会更幸运。在PHP中是
json\u encode
json\u decode
,在Javascript中是
json.stringify
json.parse
。如果你的目标是隐藏它,你仍然可以选择base64。但这将比你目前正在做的所有逃跑更可靠。旁注,可能是PHP端缺少的
entu QUOTES
参数。我正在通过Ajax传递它,我得到了超出范围的Latin1,它在json中传递,这是编码问题,我明白你的意思了。。在这种情况下,您的解决方案是PHP中的
mb\u convert\u编码?