Perl uri\u escape\u utf8行为不一致(或程序员错误!)
我试图在我的URL中实现一些文件名的URI编码,但在URI_escape和URI_escape_utf8中遇到了一些奇怪的问题,它的行为似乎不一致 使用perl命令行:Perl uri\u escape\u utf8行为不一致(或程序员错误!),perl,url,escaping,Perl,Url,Escaping,我试图在我的URL中实现一些文件名的URI编码,但在URI_escape和URI_escape_utf8中遇到了一些奇怪的问题,它的行为似乎不一致 使用perl命令行: richard@magic-box:$ perl use URI::Escape; print uri_escape_utf8("\"quotes\"_in_a_filename.pdf"); %22quotes%22_in_a_filename.pdf 太好了,正是我想要的。然后在我的代码中: print STDERR ur
richard@magic-box:$ perl
use URI::Escape;
print uri_escape_utf8("\"quotes\"_in_a_filename.pdf");
%22quotes%22_in_a_filename.pdf
太好了,正是我想要的。然后在我的代码中:
print STDERR uri_escape_utf8("\"quotes\"_in_a_filename.pdf");
print STDERR uri_escape("\"quotes\"_in_a_filename.pdf");
这将导致我的应用程序日志文件获得以下行:
"quotes"_in_a_filename.pdf
"quotes"_in_a_filename.pdf
奇怪的是,应用程序中的同一位代码可以很好地处理带空格的文件名,例如正确地输出:
my%20pdf%20with%20spaces.pdf
我有点困惑,不知道下一步该到哪里寻找解决方案。非常感谢您的帮助
干杯
R默认的不安全字符集已更改为URI发行版1.53版RFC 3986中的字符集。请参见该文件。不幸的是,文档中的默认字符列表似乎还没有更新。旧的一套是:
^A-Za-z0-9\-_.!~*'()
现在是
^A-Za-z0-9\-\._~"
这将从不安全字符中排除。我假设您的应用程序使用的是不同的perl解释器,或者至少是URI::Escape模块的不同库位置。有一个关于你的确切问题的讨论
编辑:如果您想要完全一致,我建议您声明自己的转义函数,该函数显式地传递不安全字符模式。默认的不安全字符集已更改为URI发行版1.53版RFC 3986中的字符集。请参阅文件。不幸的是,文档中的默认字符列表似乎还没有更新。旧的一套是:
^A-Za-z0-9\-_.!~*'()
现在是
^A-Za-z0-9\-\._~"
这将从不安全字符中排除。我假设您的应用程序使用的是不同的perl解释器,或者至少是URI::Escape模块的不同库位置。有一个关于你的确切问题的讨论
编辑:如果您想要完全一致,我建议您声明自己的转义函数,该函数将不安全的字符模式显式传入。当我运行您的第一个示例程序时,我在文件名.pdf中得到引号。当我运行您的第一个示例程序时,我在文件名.pdf中得到引号。非常感谢!我曾想过URI::Escape在我测试的两个不同的环境中会有所不同,但我不确定这是怎么可能的,或者为什么会有这种不同。我将创建自己的转义序列。再次感谢,谢谢你,非常感谢!我曾想过URI::Escape在我测试的两个不同的环境中会有所不同,但我不确定这是怎么可能的,或者为什么会有这种不同。我将创建自己的转义序列。再次感谢你,R