在项目中遇到这样一个问题,url中用中文传递参数,用户是用ajax提交数据的。
以下是用JS获取url的参数,以及相关信息
function GetRequest()
{
var url = location.search;
var theRequest = new Object();
if (url.indexOf("?") != -1)
{
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i < strs.length; i ++)
{
theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
}
}
return theRequest;
}
var utm_term = typeof(Request['utm_term']) == 'undefined' ? '' : '&utm_term='+escape(Request['utm_term']);
if (utm_term != '')
{
var url = document.referrer;
var tempurl = '';
var theRequest = new Object();
if (url.indexOf("?") != -1)
{
var str = url.substr(1);
strs = str.split("&");
for (var i = 0; i < strs.length; i++)
{
theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
}
if (typeof(theRequest['word']) != 'undefined')
{
tempurl = theRequest['word'].split('/')[2];
}
else if (typeof(theRequest['ltu']) != 'undefined')
{
tempurl = theRequest['ltu'].split('/')[2];
}
else if (typeof(theRequest['u']) != 'undefined')
{
tempurl = theRequest['u'].split('/')[2];
}
else
{
tempurl = url.split('/')[2];
}
}
else
{
tempurl = url.split('/')[2];
}
utm_term = utm_term + '[' + tempurl + ']';
}
提交信息
$.ajax({
type: 'post',
data: utm_term,
dataType: 'json',
error: function () {
},
success: function (data) {
},
url: '/regist'
});
在IE下参数 月 被转为 %u6708
接受到参数后,在php中做了处理,方法如下:
$str = '%u6708';
$arr = explode('%u', $str);
$len = count($arr);
for ($i=1;$i<$len;$i++)
{
if (strlen ($arr[$i]) >= 4)
{
$temp_str = substr ($arr[$i], 0, 4);
$search_str = '%u'.substr ($arr[$i], 0, 4);
$replace_str = '&#'.hexdec ($temp_str).';';
$replace_str = mb_convert_encoding ($replace_str, 'UTF-8', 'HTML-ENTITIES');
$str = str_replace ($str, $replace_str, $return_str);
}
}
return $str;