UTF-8使用Ajax将数据从Javascript传递到PHP
我在制定从Javascript到PHP再回到Javascript的输入和输出的相同匹配的正确组合时遇到了问题 Javascript编码:(textarea=input1)=>输出到(textarea=input2)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
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编码?