我有这段代码用于简单的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或类似的模块。
答案 0 :(得分:1)
您可以使用%02X
代替%02x
; %X
是sprintf
的perl扩展名,使用大写字母打印十六进制数字。
你的第二个例子(uc(sprintf('%02x', ...))
)应该可以正常工作。你确定它没有吗?
最后,您应该考虑使用URI::Escape而不是自己编写;它更符合&#34;说出你的意思&#34; (每个人都应该知道什么是URI转义)并且不易出错。