Я пытаюсь определить различия между двумя строками во время запроса на получение 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-адрес из параметров, предоставленных пользователем, запрос на получение не работает (ошибка: 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 и он указывает на различия, но я не знаю почему, учитывая, что я не вижу их вообще.
Кто-нибудь сталкивался с этой проблемой раньше? Пожалуйста, дайте мне знать, если мне нужно что-то уточнить или предоставить дополнительную информацию.
EDIT: проблема и решение
Итак, после использования предложения моба для выявления различий я обнаружил, что в сгенерированном 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;
, чтобы удалить это (и любое другое) нулевое значение.