我只是试图从URL解码一个变量,但是从变量中读取变量就没用了。
当前网址为: http://localhost:2531/members.aspx?Mcat=1&searchType=fname&fname=%u0645%u06cc%u0631%u0632%u0627
//this function
function SetSearchItems() {
try {
var WinLOC = String(window.location.toString());
WinLOC = WinLOC.replace(/%/g, '\\');
var fname = String(getParameterByName("fname", (WinLOC)));
//i want see decoded text for fname variable...
alert(decodeURIComponent(fname));
}
catch (err) {
alert(err);
}
}
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(encodeURI(results[2].replace(/\+/g, " ")));
}
正如我在代码中提到的,我想查看显示的[fname]变量已解码,但它显示:\ u0645 \ u06cc \ u0631 \ u0632 \ u0627 但这不希望我要解码...
答案 0 :(得分:1)
首先,不要编写自己的URL解析器:使用URL()
(内置的规范URL操作API),它将使您自动解析其URLSearchParams
:
parsed = new URL("http://localhost:2531/members.aspx?Mcat=1&searchType=fname&fname=%u0645%u06cc%u0631%u0632%u0627")
parsed.searchParams.get("fname")
// returns "%u0645%u06cc%u0631%u0632%u0627"
decodeURIComponent(u.searchParams.get("searchType"))
// returns "fname"
decodeURIComponent(parsed.searchParams.get("fname"));
// Uncaught URIError: URI malformed
您的字符串未采用与decodeURIComponent()
兼容的方式进行编码,看起来像escape()
生成的那样,无法正常工作:
decodeURIComponent(escape("میرزا"))
// Uncaught URIError: URI malformed
decodeURIComponent(encodeURIComponent("میرزا"))
// "میرزا"
因此,很明显,生成文本"%u0645%u06cc%u0631%u0632%u0627"
所做的任何操作都是不正确的,您需要使用任何会生成URI组件(类似于"%D9%85%DB%8C%D8%B1%D8%B2%D8%A7"
)的方法。 (也许这不是JavaScript,也未在问题中指定。)
答案 1 :(得分:-1)
我找到了解决方案,url具有unicode值,我只需要将其从unicode转换为普通文本,因此在这种情况下,decodeURIComponent确实可以工作。
通过此功能,“ \ u0645 \ u06cc \ u0631 \ u0632 \ u0627”可以转换为普通文本。
function unicodeToChar(text) {
return text.replace(/\\u[\dA-F]{4}/gi,
function (match) {
return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16));
});
}