A simple defensive library to encode/decode URL components.
Find a file
2023-01-04 11:42:06 -08:00
.github/workflows Integrated tests badge 2023-01-01 22:41:29 -05:00
gradle/wrapper Upgarded to Gradle 7.6 2022-12-31 01:52:06 -08:00
lib Updated version to 1.1.0 2023-01-03 12:56:17 -05:00
.gitattributes First commit 2022-12-31 01:27:51 -05:00
.gitignore First commit 2022-12-31 01:27:51 -05:00
gradlew First commit 2022-12-31 01:27:51 -05:00
gradlew.bat First commit 2022-12-31 01:27:51 -05:00
LICENSE.txt First commit 2022-12-31 01:27:51 -05:00
README.md Clarified Android's URI.encode statement 2023-01-04 11:42:06 -08:00
settings.gradle.kts First commit 2022-12-31 01:27:51 -05:00

License Nexus Snapshot Release Maven Central Repo Quality Gate Status GitHub CI Tests

URL Encoder for Java

A simple library to encode/decode URL parameters.

This library was extracted from the RIFE2 Web Application Framework.
A Kotlin version can also be found at https://github.com/ethauvin/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 a specified string doesn't need to be encoded.

Android's Uri.encode also addresses the same issues.

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", "?="); // -> ?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:

dependencies {
    implementation("com.uwyn:urlencoder:1.1.0")
}

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

Standalone usage

UrlEncoder can be used on the command line also, both for encoding and decoding.

You have two options:

  • run it with Gradle
  • build the jar and launch it with Java

The usage is as follows:

Encode and decode URL parameters.
  -e  encode (default)
  -d  decode

Running with Gradle

./gradlew run --args="-e 'a test &'"        # -> a%20test%20%26
./gradlew run --args="%#okékÉȢ"             # -> %25%23ok%C3%A9k%C3%89%C8%A2

./gradlew run --args="-d 'a%20test%20%26'"  # -> a test &

Running with Java

First build the jar file:

./gradlew clean jar

Then run it:

java -jar lib/build/libs/urlencoder-*.jar -e "a test &"       # -> a%20test%20%26
java -jar lib/build/libs/urlencoder-*.jar "%#okékÉȢ"          # -> %25%23ok%C3%A9k%C3%89%C8%A2

java -jar lib/build/libs/urlencoder-*.jar -d "a%20test%20%26" # -> a test &