我尝试使用bash,但似乎需要安装一些软件包,所以我想尝试一下Perl,并希望使用一个干净且只有一个命令来实现它。
示例代码:
#!/usr/bin/perl
use URI::Escape;
my $string = "https://aá-brø.com/sub/index.php";
my $encode = uri_escape($string);
print $encode;
期望输出:
https://a%C3%A1-br%C3%B8.com/sub/index.php
实际产量:
https%3A%2F%2Fa%C3%A1-br%C3%B8.com%2Fsub%2Findex.php
我检查了https://metacpan.org/pod/URI::Escape,似乎那些 char(:, /, + ..etc) 应该保留,或者也许我遗漏了一些东西。
一个命令解决方案,目前为止一个命令就可以工作。但如果有简化的方法欢迎分享。
perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "https://aá-brø.com/sub/index.php"
引用 URI::Escape:
的文档要转义的默认字符集是所有不属于上面显示的非保留字符类以及保留字符的字符。 IE。默认为:
"^A-Za-z0-9\-\._~"
所以它的行为与记录的完全一样。如果您想将
:/
视为安全,您必须明确说明,即
my $unsafe = "^A-Za-z0-9\-\._~:/";
my $encode = uri_escape($string, $unsafe);