encodeURIComponent 但小写

encodeURIComponent but in lowercase

我有一些要求可以通过直接使用 encodeURIComponent 轻松满足,但生活从来都不容易,因为这个客户系统的特殊工作方式,我们需要对来自数据库的东西进行编码 url 格式(例如 products/household+products/)并将其转换为必须遵循 'encoded' 格式(products%2Fhousehold%2Bproducts%2F)的存储 blob,但是,它必须是小写 (%2F -> %2F).

然而,第二个是客户也有区域化页面,并且这些页面必须保持大写(例如 products/GB/household+products)。那个 GB 必须保持大写,所以我不能用 .toLowerCase()

地毯式轰炸整个事情

有什么想法吗?

您可以使用正则表达式来匹配编码的“字节”并将它们转换为小写:

function encode(text) {
    const uriEncoded = encodeURIComponent(text);
    return uriEncoded.replace(/%\w\w/g, match => match.toLowerCase());
}

产生:

> encode("products/GB/household+products")
'products%2fGB%2fhousehold%2bproducts'

你可以看到 GB 被保留,而 %2f%2b 是小写的。

也很容易解码,用同样的方法但是你必须转换成大写然后正常解码。