¿Cómo averiguar si la cadena ya ha sido codificada URL?


¿Cómo puedo comprobar si la cadena ya ha sido codificada?

Por ejemplo, si codifico TEST==, obtengo TEST%3D%3D. Si vuelvo a codificar la última cadena, obtengo TEST%253D%253D, tendría que saber antes de hacer eso si ya está codificada...

Tengo parámetros codificados guardados, y necesito buscarlos. No se para los parámetros de entrada, que van a ser codificados o no, así que tengo que saber si tengo que codificarlos o decodificarlos antes de la búsqueda.

Author: Trick, 2010-02-19

5 answers

Decodificar, comparar con el original. Si difiere, el original está codificado. Si no difiere, el original no está codificado. Pero aún así no dice nada acerca de si la versión recién decodificada aún no está codificada. Una buena tarea para la recursión.

Espero que uno no pueda escribir un quine en urlencode, o este algoritmo se atascaría.

 33
Author: SF.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-19 09:52:33

Use regexp para comprobar si su cadena contiene caracteres ilegales (es decir, caracteres que no se pueden encontrar en la cadena codificada por URL, como los espacios en blanco).

 14
Author: Roman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-19 09:50:35

Joel en software tenía una solución para esto en algún momento atrás - http://www.joelonsoftware.com/articles/Wrong.html
O puede agregar algún prefijo a las cadenas.

 4
Author: Padmarag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-19 09:55:27

No puedes saber con seguridad, a menos que tus cuerdas se ajusten a un cierto patrón, o que mantengas un registro de tus cuerdas. Como usted mismo señaló, una cadena que está codificada también se puede codificar, por lo que no puede estar 100% seguro al mirar la cadena en sí.

 3
Author: flybywire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-19 09:39:25

Intenta decodificar la url. Si la cadena resultante es más corta que la original, entonces la URL original ya estaba codificada, de lo contrario, puede codificarla de forma segura (o bien no está codificada, o incluso la codificación posterior de la url permanece como está, por lo que la codificación de nuevo no resultará en una url incorrecta). A continuación se muestra un ejemplo de código pseudo (inspirado en ruby):

# Returns encoded URL for any given URL after determining whether it is already encoded or not
    def escape(url)
      unescaped_url = URI.unescape(url)
      if (unescaped_url.length < url.length)
        return url
      else
        return URI.escape(url)
      end
    end
 3
Author: amit_saxena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-07 14:22:58