【发布时间】:2015-03-30 16:52:36
【问题描述】:
我有一个搜索页面,其中包含可搜索的数据库名称下拉列表。选择数据库时,该名称将在查询字符串中使用以获取搜索结果。然后,我有一个保存搜索的函数,它只需获取当前 URL 的查询字符串并将其保存到数据库中。但是,我的一个数据库名称引起了问题,因为连字符没有正确编码。
数据库的名称是“Barnstable, MA:Probate Records 1685–1789”。生成的查询字符串是
?database=Barnstable%2C%20MA%3A%20Probate%20Records%201685–1789
这很好,查询字符串得到了我需要的结果。但是当我使用“window.location.search”获取当前查询字符串时,连字符会变成 UTF-8 编码“%e2%80%93”。这是我的保存功能:
function SaveSearch(query, url) {
var title = $("#save-name").val();
query = removeParam("page", query);
if (title) {
$.ajax({
url: url,
type: 'post',
success: function (info) {
console.log("INFO: ");
console.log(info);
if (info == "Success") {
// change icon
$('#name-search').hide();
$('#save-name').val('');
$("#search-saved").show();
} else {
$("#not-logged-in").show();
}
},
error: function (info) {
$("#error").show();
},
data: { queryParams: query, title: title }
});
}
}
当我调试它时,如果我一开始就悬停“查询”,它会显示为
database=Barnstable%2C%20MA%3A%20Probate%20Records%201685%e2%80%931789
即使我没有更改编码中的任何内容,并且页面顶部的 url 中有一个连字符。所以它最终在我的数据库中为 %e2%80%93。
当我尝试加载此搜索时出现问题:
$.ajax({
url: url,
type: 'get',
async: true,
dataType: 'json',
success: function (data) {
for (var i = 0; i < data.length; i++) {
var query = data[(data.length - (i + 1))].QueryParams;
var params = (data[(data.length - (i + 1))].QueryParams).split("&");
console.log(params);
var paramDisplay = "";
for (var j = 0; j < params.length; j++) {
var param = params[j].split("=");
var label = labelArray[param[0]];
if (label != undefined) {
var paramString = label + ": " + unescape(param[1]);
paramDisplay += paramString;
if (j < params.length - 1) {
paramDisplay += "<br />";
}
}
}..........
unescape(param[1]) 返回“马萨诸塞州巴恩斯特布尔:遗嘱认证记录 1685-1789”
然后,当我尝试进行此搜索时,它没有得到任何结果,因为名称中包含错误的字符。
【问题讨论】:
标签: javascript encoding utf-8 escaping uri