为URL编码字符串(Angular)

63

我正在尝试编码一个相当复杂的字符串,以便将其包含在mailto:中。

组件:

<a href="mailto:test@example.com?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')

当我尝试使用encodeValue时,出现“找不到名称encodeValue”的错误。

如何最好地对body进行url编码?


2
首先,您可以使用 JavaScript 的 encodeURI 函数来编码文本。(如果您使用了这些字符之一 - ;,/?:@&=+$#,请改用 encodeURIComponent 函数。) - Edric
但是这在项目符号或换行符上没有起作用。 - user749798
2
它旨在用于URI。 - Edric
2个回答

74

HttpParameterCodec:是用于编码和解码URL中参数的编解码器(由HttpParams使用)。

如果您需要对Url进行编码,可以使用以下方法:

encodeURI假定输入是完整的URI,其中可能包含需要编码的某些字符。

encodeURIComponent将编码所有具有特殊含义的内容,因此您可以将其用于URI的组成部分,例如:

var textSample= "A sentence with symbols & characters that have special meaning?";
var uri = 'http://example.com/foo?hello=' + encodeURIComponent(textSample);

65

encodeURI() 和 encodeURIComponent() 都可以使用,但它们有一些不同:

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)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接