Skip to content

Encode a URL to a percent-encoded form, excluding already-encoded sequences. Build for Deno

License

Notifications You must be signed in to change notification settings

ako-deno/encodeurl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

encodeurl

tag encodeurl-ci HitCount

Encode a URL to a percent-encoded form, excluding already-encoded sequences. Build for Deno, compatible with Browser. Based on https://github.com/pillarjs/encodeurl.

API

import { encodeUrl } from "https://deno.land/x/encodeurl/mod.ts";

encodeUrl(url: string): string

Encode a URL to a percent-encoded form, excluding already-encoded sequences.

This function will take an already-encoded URL and encode all the non-URL code points (as UTF-8 byte sequences). This function will not encode the "%" character unless it is not part of a valid sequence (%20 will be left as-is, but %foo will be encoded as %25foo).

This encode is meant to be "safe" and does not throw errors. It will try as hard as it can to properly encode the given URL, including replacing any raw, unpaired surrogate pairs with the Unicode replacement character prior to encoding.

This function is similar to the intrinsic function encodeURI, except it will not encode the % character if that is part of a valid sequence, will not encode [ and ] (for IPv6 hostnames) and will replace raw, unpaired surrogate pairs with the Unicode replacement character (instead of throwing).

Examples

Encode a URL containing user-controled data

import {
  serve,
  Response,
} from "https://deno.land/std/http/server.ts";
import { encodeUrl } from "https://deno.land/x/encodeurl/mod.ts";
import { escapeHtml } from "https://deno.land/x/escape_html/mod.ts";

const server = serve("127.0.0.1:3000");
console.log("Server listening on: 3000");

for await (const req of server) {
  const res: Response = {
    status: 404,
    body: `<p>Location ${escapeHtml(encodeUrl(req.url))} not found</p>`,
    headers: new Headers([
      ["Content-Type", "text/html; charset=UTF-8"],
    ]),
  };
  req.respond(res);
}

Encode a URL for use in a header field

import {
  serve,
  Response,
} from "https://deno.land/std/http/server.ts";

import { encodeUrl } from "https://deno.land/x/encodeurl/mod.ts";
import { escapeHtml } from "https://deno.land/x/escape_html/mod.ts";

const server = serve("127.0.0.1:3000");
console.log("Server listening on: 3000");

for await (const req of server) {
  const location = encodeUrl("https://www.google.com/");
  const res: Response = {
    status: 302,
    body: `<p>Redirecting to new site: ${escapeHtml(location)}</p>`,
    headers: new Headers([
      ["Content-Type", "text/html; charset=UTF-8"],
      ["Location", location],
    ]),
  };
  req.respond(res);
}

Testing

$ deno test

References

License

MIT

About

Encode a URL to a percent-encoded form, excluding already-encoded sequences. Build for Deno

Resources

License

Stars

Watchers

Forks

Packages

No packages published