fork download
  1. <?php
  2.  
  3. function miUrlEncode($string) {
  4. if (preg_match("/%[0-9a-f]{2}/i", $string)) {
  5. // Parece codificada, codificamos por trozos
  6. $trozos = preg_split("/(%[0-9a-f]{2})/i", $string, -1, PREG_SPLIT_DELIM_CAPTURE);
  7. //print_r($trozos);
  8. $trozos_tratados = array_map(function ($trozo) {
  9. return preg_match("/^%[0-9a-f]{2}$/i", $trozo)
  10. ? $trozo
  11. : miStrEncode($trozo);
  12. }, $trozos);
  13. return implode('', $trozos_tratados);
  14. }
  15. // No parece codificada, la codificamos entera
  16. return miStrEncode($string);
  17. }
  18.  
  19. function miStrEncode($string) {
  20. $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
  21. $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");
  22. return str_replace($entities, $replacements, urlencode($string));
  23. }
  24.  
  25. $mi_url_codificada = 'https://es.stackoverflow.com/questions/245279/c%c3%b3mo-detectar-si-una-url-est%c3%a1-codificada-en-php';
  26. $mi_url_sin_codificar = 'https://es.stackoverflow.com/questions/245279/cómo-detectar-si-una-url-está-codificada-en-php';
  27.  
  28. $array_con_urls['url_codificada'] = 'https://es.stackoverflow.com/questions/245279/c%c3%b3mo-detectar-si-una-url-est%c3%a1-codificada-en-php';
  29. $array_con_urls['url_sin_codificar'] = 'https://es.stackoverflow.com/questions/245279/cómo-detectar-si-una-url-está-codificada-en-php';
  30.  
  31. print(miUrlEncode($mi_url_codificada) . "\n");
  32. print(miUrlEncode($mi_url_sin_codificar) . "\n");
  33.  
  34. print(miUrlEncode($array_con_urls['url_codificada']) . "\n");
  35. print(miUrlEncode($array_con_urls['url_sin_codificar']) . "\n");
  36.  
  37.  
  38. print(miUrlEncode('www.foo.bar/españa/%AD/sí%12/') . "\n");
  39.  
  40.  
  41.  
Success #stdin #stdout 0s 82624KB
stdin
Standard input is empty
stdout
https://es.stackoverflow.com/questions/245279/c%c3%b3mo-detectar-si-una-url-est%c3%a1-codificada-en-php
https://es.stackoverflow.com/questions/245279/c%C3%B3mo-detectar-si-una-url-est%C3%A1-codificada-en-php
https://es.stackoverflow.com/questions/245279/c%c3%b3mo-detectar-si-una-url-est%c3%a1-codificada-en-php
https://es.stackoverflow.com/questions/245279/c%C3%B3mo-detectar-si-una-url-est%C3%A1-codificada-en-php
www.foo.bar/espa%C3%B1a/%AD/s%C3%AD%12/