A simple defensive library to encode/decode URL components. https://github.com/ethauvin/urlencoder
Find a file
2023-01-02 11:32:35 -08:00
.github/workflows Removed main arguments splitting 2023-01-01 10:26:50 -08:00
.idea Initial commit. 2022-12-30 17:45:42 -08:00
gradle/wrapper Initial commit. 2022-12-30 17:45:42 -08:00
lib Added exception trapping in main 2023-01-02 11:32:35 -08:00
.gitattributes Initial commit. 2022-12-30 17:45:42 -08:00
.gitignore Initial commit. 2022-12-30 17:45:42 -08:00
gradlew Initial commit. 2022-12-30 17:45:42 -08:00
gradlew.bat Initial commit. 2022-12-30 17:45:42 -08:00
LICENSE.txt Initial commit. 2022-12-30 17:45:42 -08:00
README.md Added main method for command line usage 2023-01-01 06:26:47 -08:00
settings.gradle.kts Initial commit. 2022-12-30 17:45:42 -08:00

License Nexus Snapshot

Quality Gate Status GitHub CI

URL Encoder for Kotlin and Java

A simple library to encode/decode URL parameters.

This library was adapted from the RIFE2 Web Application Framework.
A pure Java version can also be found at https://github.com/gbevin/urlencoder.

For decades we've been using java.net.URLEncoder because of its improper naming. It is actually intended to encode HTML form parameters, not URLs, causing the wrong escape sequences to be used.

Additionally, java.net.URLEncoder allocates memory even when no encoding is necessary, significantly impacting performance. This library has a negligible performance impact when the specified string doesn't need to be encoded.

Android's Uri.encode also addresses these issues, but does not currently support unicode surrogate pairs.

Examples (TL;DR)

UrlEncoder.encode("a test &") // -> a%20test%20%26
UrlEncoder.encode("%#okékÉȢ smile!😁") // -> %25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81
UrlEncoder.encode("?test=a test", allow = "?=") // -> ?test=a%20test

UrlEncoder.decode("a%20test%20%26") // -> a test &
UrlEncoder.decode("%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81") // -> %#okékÉȢ smile!😁

Gradle, Maven, etc.

To use with Gradle, include the following dependency in your build file:

repositories {
    mavenCentral()
    maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots") }
}

dependencies {
    implementation("net.thauvin.erik:urlencoder:0.9-SNAPSHOT")
}

Instructions for using with Maven, Ivy, etc. can be found on Maven Central.