网站首页php
Js与PHP数据交互
发布时间:2015-11-02 01:30:02编辑:阅读(4846)
因为安全问题, 已将所有前端提交数据进行过滤,而此时后台有时会需要更新一些页面跟踪代码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"
无需引入任何文件,直接使用:)
评论