大写 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
; %X
是 sprintf
的 perl 扩展,它使用大写字母打印十六进制数字。
不过,您的第二个示例(使用 uc(sprintf('%02x', ...))
)应该工作得很好。你确定不是吗?
最后,您应该考虑使用 URI::Escape 而不是自己编写;它更符合 "saying what you mean" 的精神(每个人都应该知道 URI 转义是什么)并且不易出错。
我有这段简单的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
; %X
是 sprintf
的 perl 扩展,它使用大写字母打印十六进制数字。
不过,您的第二个示例(使用 uc(sprintf('%02x', ...))
)应该工作得很好。你确定不是吗?
最后,您应该考虑使用 URI::Escape 而不是自己编写;它更符合 "saying what you mean" 的精神(每个人都应该知道 URI 转义是什么)并且不易出错。