Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl uri\u escape\u utf8行为不一致(或程序员错误!)_Perl_Url_Escaping - Fatal编程技术网

Perl uri\u escape\u utf8行为不一致(或程序员错误!)

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

我试图在我的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 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