大写URL编码字符

时间:2015-01-04 20:32:45

标签: perl

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

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

现在,它完全符合我的要求,但它返回带有小写字符的编码网址

所以我得到了:

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($1))) /ge ;

以及:

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

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

没有运气。

我注意到这里针对另一种语言的类似问题(Get string from Server.UrlEncode as uppercase)对于为什么需要改为大写而我有很多疑问,但是如果可能/我仍然愿意这样做。< / p>

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

1 个答案:

答案 0 :(得分:1)

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

你的第二个例子(uc(sprintf('%02x', ...)))应该可以正常工作。你确定它没有吗?

最后,您应该考虑使用URI::Escape而不是自己编写;它更符合&#34;说出你的意思&#34; (每个人都应该知道什么是URI转义)并且不易出错。