我试图在 URL 获取请求期间识别两个字符串之间的差异(使用 LWP::Simple)。
我有一个 URL,比如http://www.example.com?param1=x¶m2=y¶m3=z
我确保所有空白输入也得到处理,但此时这无关紧要,因为我要确保所有参数完全一样。
此外,硬编码的 URL 是从生成的 URL 复制和粘贴的。
当我执行以下操作时,此 URL 有效:
my $url = "http://www.example.com?param1=x¶m2=y¶m3=z";
my $content = get($url);
然而,当我从用户提供的参数构建 URL 时,get 请求不起作用(错误:来自站点的 500)。
我通过打印出来比较了这两个 URL,发现差异为零。我已经尝试删除所有潜在的隐形字符。
生成的代码和静态字符串的输出,假设用户输入与静态字符串相同(这是我要确保做的):
http://www.example.com?param1=x¶m2=y¶m3=z
http://www.example.com?param1=x¶m2=y¶m3=z
我假设打印输出会删除我看不到的字符。我还遵循了http://www.perlmonks.org/?node_id=882590上的解决方案,它指出了差异,但我不知道为什么,考虑到我根本看不到。
有没有人遇到过这个问题?如果我需要澄清任何事情或需要提供其他信息,请告诉我。
编辑:问题和解决方案
因此,在使用 mob 的建议来识别差异之后,我发现生成的 URL 中有一个空字符,它没有在输出中打印出来。即:
http://www.example.com?param1=x¶m2=y¶m3=z
实际上是
http://www.example.com?param1=x¶m2=y¶m3=\000z
。
我使用了一个简单的正则表达式:$url =~ s/\000//g;
删除该(和任何其他)空值。