【发布时间】:2012-12-25 07:36:33
【问题描述】:
我试图在 URL 获取请求期间识别两个字符串之间的差异(使用 LWP::Simple)。
我有一个网址,比如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&param2=y&param3=z实际上是http://www.example.com?param1=x&param2=y&param3=\000z。
我使用了一个简单的正则表达式:$url =~ s/\000//g; 来删除该(以及任何其他)空值。
【问题讨论】:
-
你能提供你的代码来解析用户输入,同时输出显示差异
-
我只是通过 POST 传递值并按名称获取它们。事实证明,其中一个 POST 值添加了一个 NULL 序列,而我什至没有考虑这一点。
标签: string perl url cgi get-request