68

I'm trying to encode a string that's pretty complex, so that I can include it in a mailto:

Component:

<a href="mailto:[email protected]?subject='Hello'&{{body}}">

TS:

import { HttpParameterCodec } from "@angular/common/http";

let body = encodeValue('This is the example body\nIt has line breaks and bullets\n\u2022bullet one\n\u2022bullet two\n\u2022bullet three')

When I try to use encodeValue, I get "cannot find name encodeValue.

How would be best to url-encode body?

3
  • 2
    For a start, you can use JavaScript's encodeURI function which should encode your text. (If you're using one of the characters - ;,/?:@&=+$#, please use the encodeURIComponent function instead.) Commented Mar 29, 2019 at 15:14
  • That didn't work on bullets or line breaks though Commented Mar 29, 2019 at 15:15
  • 2
    It's meant to be used for URIs Commented Mar 29, 2019 at 15:16

2 Answers 2

79

HttpParameterCodec : is a codec for encoding and decoding parameters in URLs( Used by HttpParams).

If you need to encode Url you can use the below:

encodeURI assumes that the input is a complete URI that might have some characters which need encoding in it.

encodeURIComponent will encode everything with special meaning, so you use it for components of URIs, such as:

var textSample= "A sentence with symbols & characters that have special meaning?";
var uri = 'http://example.com/foo?hello=' + encodeURIComponent(textSample);
Sign up to request clarification or add additional context in comments.

Comments

69

Both encodeURI() and encodeURIComponent() will work, while there are some differences:

var set1 = ";,/?:@&=+$";  // Reserved Characters
var set2 = "-_.!~*'()";   // Unescaped Characters
var set3 = "#";           // Number Sign
var set4 = "ABC abc 123"; // Alphanumeric Characters + Space

console.log(encodeURI(set1)); // ;,/?:@&=+$
console.log(encodeURI(set2)); // -_.!~*'()
console.log(encodeURI(set3)); // #
console.log(encodeURI(set4)); // ABC%20abc%20123 (the space gets encoded as %20)

console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24
console.log(encodeURIComponent(set2)); // -_.!~*'()
console.log(encodeURIComponent(set3)); // %23
console.log(encodeURIComponent(set4)); // ABC%20abc%20123 (the space gets encoded as %20)

Reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.