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
是小写的。
也很容易解码,用同样的方法但是你先必须转换成大写然后正常解码。
我有一些要求可以通过直接使用 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
是小写的。
也很容易解码,用同样的方法但是你先必须转换成大写然后正常解码。