您的位置 首页 > 数码极客

url如何编码解码器 url编码 中文如何处理…

欢迎来到我的专题文章《前端面试题》系列,更多精彩内容持续更新中,欢迎关注!

本章我们来看一道前端经典的面试题。怎么解码一个被编码N次的url,先说一下url的编码和解码。这也是我的面试过程中真实的面试题,下面把我的做法分享给大家。

url编码和解码

这里面有一个坑,我掉进去了,我先说通过encodeURI来编码,decodeURI来解码。我话音刚落,面试官断了我说:你确定吗?

突然的打断让我有些不知所措,导致接下来的面试都不顺利。

我的大脑高速旋转,然后我想到了之前做微信分享的时候,我们传入url的时候需要将地址进行编码,那个好像用不是这个encodeURI,没错,是 encodeURIComponent 这个api,虽然我没有完整的将这个单词说出来,然后我结合业务场景,说出了url编码的一个应用,也算是勉强过关了吧。

说完了以后,面试官说:encodeURI和decodeURI已经不再建议使用了。转而我们应该使用encodeURIComponent 和 dncodeURIComponent来替代。

这个应该只是前戏了,关键是这个题目的本身该如何去解?

不着急解题,我们先来看看这两个api的基本用法。

编码后,程序会将我们的url中的特殊字符进行编码,生成一个新的url,如果继续编码,将会继续生成一个不同的url。

同理,我们再来看下解码过程。

我们将之前编码后的url进行两次解码,可以得到我们最终熟悉的url了。

好了,我们再来回到问题本身。如何解码一个被多次编码的url.也就是说,这个url我们是不知道它被编码了多少次的。

那这个问题该怎么解呢?

第一次面临这样的问题,在面试的过程中可能一下子被问住了。没关系,我们先来看另一个问题。

说:如果遍历一个文件夹中的文件夹和文件。相信这个问题很直白了。文件夹里面可能还有文件夹,里面可以无限嵌套。

其实稍微有些工作经验的就知道,文件夹的问题肯定是要用到递归来处理了。

好,我们再来类比一下我们的今天的这个问题。两个问题有什么相同的地方没有?

解题思路

不难发现,两个问题中,有一个共同的特点。那就是都有一个不确定的因素。不知道文件夹有多少层,不知道url被编码了多少次。

从类比结果我们可以知道,这个url编码的问题应该是要用到递归算法去处理了。

递归算法

关系递归算法的相关知识点,我前面的文章函数那点事已经有了详细的介绍,这里不再赘述了。

首先,我们找出终止条件。

如果一个url解码前和解码后的不发生任何变化,那么我们就可以判断这个url被完全编码出来了。

找出了终止条件,接下来我们调用自身的方法,我只需要将编码后的参数继续调用自身去编码即可。

好了,到这这个问题基本上可以解决掉了。

下面我来上完整的代码的结果

其实很简单,对吗?

好了,到这里,这个问题基本是可以是解决了。

总结:

  • url编码和解码用到的新的api。
  • 在面试过程中,凡是提到了不知道有多少次操作的,一般来说都要用到递归算法。
  • 递归算法的核心技巧可以参考我前面的文章,这一点很重要,面试非常喜欢问。

最后给大家留一个真实的面试题,也是有关递归算法的。

将一个数组扁平化

var arr = [1,[2,3,[4,5]],[6,7,8,[9]]];

给出一个算法,让返回数组结果:[1,2,3,4,5,6,7,8,9];

这个题目就很直白了,一般来说我们知道用递归算法了。


这里是【畅哥聊技术】的《前端面试题》专题系列。更多内容持续更新中。

下期我们接着聊,未完待续。。。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“url如何编码解码器,url编码,中文如何处理,URL解码器”边界阅读