Предположим, один URL кодирует строку.
urlencode(String1); => Становится String2
urlencode(String1);
String2
Создает ли последовательное кодирование URL на String2 строку, отличную от String 2?
String 2
значение, urlencode(String2) == String2?
urlencode(String2) == String2
urlencode(String2) != String2?
urlencode(String2) != String2
Это, безусловно, создает другую строку, если исходная строка содержала любой не-альфа и не -_ символ.
-_
Таким образом, если первый urlencode кодирует хотя бы один не пробел, он поместит % в результирующую строку как часть шаблона %XX. Последующие urlencode s перекодируют это % (и начинают искажать исходную строку до неузнаваемости).
urlencode
%
%XX
См. Это в действии .