Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to keep a URL get from the current address un-encoded in JavaScript?

I have a JavaScript that replaces part of the href of links with the current URL (window.location.href). But I find that the URL replaced is encoded, meaning it is not exactly the same as the original URL.

Desired result: ?redirect=www.example.com/path/slug
Not desired: ?redirect=www.example.com%2path%2slug

I tried to use something like decodeURI near the end of the script but failed.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Here is the working script:
( Also trying on CodePen: [https://codepen.io/pen/MWVMmZW][1] )

$(function () {
  $("a[href*='redirect']").each(function () {
    const url_str = $(this).attr("href");
    const this_url = new URL(url_str);
    if (this_url.searchParams.get("redirect")) {
      // Get the current url from the browser
      // Remove protocol
      const current_url = window.location.href.split("://")[1];
      // Remove the last slash
      let regex = /\/$/;
      let clean_url = current_url.replace(regex, "");
      const redirect = this_url.searchParams.set("redirect", clean_url);
      $(this).attr("href", this_url.href);
    }
  });
});
body {
  padding: 10px 20px;
}
a {
  display: block;
  margin: 0 0 5px 0;
  text-decoration: none;
}
hr {
  height: 0px;
  margin: 30px 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Objective:<br>To change whatever text after <strong>?redirect=</strong> in the links to the current visiting URL using JavaScript. ( only after <strong>?redirect=</strong> )</p>
<a href="https://app.example.com/?redirect=www.111.com">Link A</a>
<a href="https://app.example.com/?redirect=www.222.com">Link B</a>
<a href="https://app.example.com/?redirect=www.333.com">Link C</a>
<p>So, if the current address is https://www.example.com/about/dog<br>The above links should change to:<br>→ https://app.example.com/?redirect=www.example.com/about/dog</p>

<hr />

<p>Other URLs remain unchanged on the web page.</p>
<a href="https://www.example.com">Other Link 01</a>
<a href="https://www.example.com/about">Other Link 02</a>
<a href="https://app.example.com/?search=game">Other Link 03</a>

>Solution :

The correct answer is to alter the final part like it follows:

      const redirect = this_url.searchParams.set("redirect", clean_url);
      $(this).attr("href", decodeURIComponent(this_url.href));

Please delete the accepted sign.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading