首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >decodeURIComponent无法从URL中工作

decodeURIComponent无法从URL中工作
EN

Stack Overflow用户
提问于 2019-01-16 22:23:12
回答 2查看 67关注 0票数 0

我只是试着从URL中解码一个变量,但是当它从变量中读取时,它就不能工作了。

当前的网址是:http://localhost:2531/members.aspx?Mcat=1&searchType=fname&fname=%u0645%u06cc%u0631%u0632%u0627

代码语言:javascript
复制
        //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,但我不想解码.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-16 23:26:04

我找到了解决方案,url有unicode值,我只需要将它从unicode转换为普通文本,因此在本例中,decodeURIComponent剂量工作非常有效。

通过这个函数,'\u0645\u06cc\u0631\u0632\u0627‘可以转换为正常文本。

代码语言:javascript
复制
    function unicodeToChar(text) {
        return text.replace(/\\u[\dA-F]{4}/gi,
               function (match) {
                   return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16));
               });
    }

多亏了https://stackoverflow.com/users/1497100/bryan-rayner

票数 -1
EN

Stack Overflow用户

发布于 2019-01-16 22:42:42

首先,不要编写您自己的URL解析器:使用URL(),这是内置的规范URL操作API,它将允许您自动解析其URLSearchParams

代码语言:javascript
复制
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()生成的内容,但不起作用:

代码语言:javascript
复制
decodeURIComponent(escape("میرزا"))
// Uncaught URIError: URI malformed

相反,您希望使用encodeURICompoenent()

代码语言:javascript
复制
decodeURIComponent(encodeURIComponent("میرزا"))
// "میرزا"

因此,要明确的是,无论您做了什么来生成文本"%u0645%u06cc%u0631%u0632%u0627"都是不正确的,您需要使用任何将生成URI组件的方法,该组件看起来将类似于"%D9%85%DB%8C%D8%B1%D8%B2%D8%A7"。(也许这不是JavaScript,问题中没有具体说明。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54226306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档