网站首页php
Js与PHP数据交互
发布时间:2015-11-02 01:30:02编辑:阅读(5025)
因为安全问题, 已将所有前端提交数据进行过滤,而此时后台有时会需要更新一些页面跟踪代码js之类的。这时提交的js代码是无法交给后台的, 所以需要将提交的代码进行处理。
这里一般有两种方法:
一、前端用JS的escape函数, 将所有的ASCII 字母和数字这外的字符进行编码,使用ajax提交,
<script>
var content=escape($("#content").val());
$.post("process_url", {content:content}, function(data){
//process
});
</script>然后在后端使用PHP编写的unescape函数进行解码,
<?php $content=unescape($_POST['content']); ?>
PHP的unescape函数如下所示:
<?php
/** php函数,用于解码在前端用js编码过的数据
* 输入参数 $str 字符串
* 返回解码后的字符串
*/
function unescape($str){
$ret = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++){
if ($str[$i] == '%' && $str[$i+1] == 'u'){
$val = hexdec(substr($str, $i+2, 4));
if ($val < 0x7f) $ret .= chr($val);
else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
$i += 5;
}
else if ($str[$i] == '%'){
$ret .= urldecode(substr($str, $i, 3));
$i += 2;
}
else $ret .= $str[$i];
}
return $ret;
}
?>二、前端用Jquery库jquery.base64.js的base64相关函数,将提交的数据编码后,使用ajax提交,
<script language="javascript" src="jquery-1.11.3.js"></script>
<script language="javascript" src="jquery.base64.js"></script>
<script>
$.base64.utf8encode = true;
var content= $.base64.btoa($("#content").val());
$.post("process_url", {content:content}, function(data){
//process
});
</script>然后在后端使用PHP的base64_decode函数进行解码。
<?php $content=base64_decode($_POST['content']); ?>
---------------------------------我是分割线--------------------------------------
上面第二种方式已过期, 现在使用以下方法来实现base64编码:
base64编码:
function b64EncodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode('0x' + p1);
}));
}
b64EncodeUnicode('✓ à la mode'); // "4pyTIMOgIGxhIG1vZGU="base64解码:
function b64DecodeUnicode(str) {
return decodeURIComponent(atob(str).split('').map(function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
}
b64DecodeUnicode('4pyTIMOgIGxhIG1vZGU='); // "✓ à la mode"
b64DecodeUnicode('Cg=='); // "\n"无需引入任何文件,直接使用:)
评论