大写 URL 编码字符

Uppercase URL Encoded Characters

我有这段简单的url编码代码:

$enc_url= 'http://example.com/exampledir/file.pl';
$enc_url=~ s/(\W)/ '%' . sprintf('%02x',ord()) /ge ;

现在,它完全符合我的要求,但它 returns 编码的 url 带有小写字符

所以我得到:

http%3a%2f%2fwww%2eexample%2ecom%2fexampledir%2ffile%2fpl

但我想要(为了我自己的可读性):

http%3A%2F%2Fwww%2Eexample%2Ecom%2Fexampledir%2Ffile%2Epl

我试过:

$enc_url=~ s/(\W)/ uc('%' . sprintf('%02x',ord())) /ge ;

以及:

$enc_url=~ s/(\W)/ '%' . uc(sprintf('%02x',ord())) /ge ;

和:

$enc_url=~ s/(\W)/ '%' . sprintf('%02x',uc(ord())) /ge ;

运气不好。

我注意到此处针对另一种语言的类似问题 (Get string from Server.UrlEncode as uppercase) 有很多关于为什么需要更改为大写的问题,我理解但我仍然愿意 possible/trivial要做。

主要是我不能使用URI::Escape或类似的模块。

您可以使用%02X代替%02x%Xsprintf 的 perl 扩展,它使用大写字母打印十六进制数字。

不过,您的第二个示例(使用 uc(sprintf('%02x', ...)))应该工作得很好。你确定不是吗?

最后,您应该考虑使用 URI::Escape 而不是自己编写;它更符合 "saying what you mean" 的精神(每个人都应该知道 URI 转义是什么)并且不易出错。