<?php
function miUrlEncode($string) {
// Parece codificada, codificamos por trozos
$trozos = preg_split("/(%[0-9a-f]{2})/i", $string, -1, PREG_SPLIT_DELIM_CAPTURE
); //print_r($trozos);
$trozos_tratados = array_map(function ($trozo) { ? $trozo
: miStrEncode($trozo);
}, $trozos);
return implode('', $trozos_tratados); }
// No parece codificada, la codificamos entera
return miStrEncode($string);
}
function miStrEncode($string) {
$entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D'); $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]"); }
$mi_url_codificada = 'https://es.stackoverflow.com/questions/245279/c%c3%b3mo-detectar-si-una-url-est%c3%a1-codificada-en-php';
$mi_url_sin_codificar = 'https://es.stackoverflow.com/questions/245279/cómo-detectar-si-una-url-está-codificada-en-php';
$array_con_urls['url_codificada'] = 'https://es.stackoverflow.com/questions/245279/c%c3%b3mo-detectar-si-una-url-est%c3%a1-codificada-en-php';
$array_con_urls['url_sin_codificar'] = 'https://es.stackoverflow.com/questions/245279/cómo-detectar-si-una-url-está-codificada-en-php';
print(miUrlEncode($mi_url_codificada) . "\n");
print(miUrlEncode($mi_url_sin_codificar) . "\n");
print(miUrlEncode($array_con_urls['url_codificada']) . "\n");
print(miUrlEncode($array_con_urls['url_sin_codificar']) . "\n");
print(miUrlEncode('www.foo.bar/españa/%AD/sí%12/') . "\n");
PD9waHAKCmZ1bmN0aW9uIG1pVXJsRW5jb2RlKCRzdHJpbmcpIHsKCWlmIChwcmVnX21hdGNoKCIvJVswLTlhLWZdezJ9L2kiLCAkc3RyaW5nKSkgewoJCS8vIFBhcmVjZSBjb2RpZmljYWRhLCBjb2RpZmljYW1vcyBwb3IgdHJvem9zCgkJJHRyb3pvcyA9IHByZWdfc3BsaXQoIi8oJVswLTlhLWZdezJ9KS9pIiwgJHN0cmluZywgLTEsIFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSk7CgkJLy9wcmludF9yKCR0cm96b3MpOwoJCSR0cm96b3NfdHJhdGFkb3MgPSBhcnJheV9tYXAoZnVuY3Rpb24gKCR0cm96bykgewoJCQlyZXR1cm4gcHJlZ19tYXRjaCgiL14lWzAtOWEtZl17Mn0kL2kiLCAkdHJvem8pCgkJCSAgPyAkdHJvem8KCQkJICA6IG1pU3RyRW5jb2RlKCR0cm96byk7CgkJfSwgJHRyb3pvcyk7CgkJcmV0dXJuIGltcGxvZGUoJycsICR0cm96b3NfdHJhdGFkb3MpOwoJfQoJLy8gTm8gcGFyZWNlIGNvZGlmaWNhZGEsIGxhIGNvZGlmaWNhbW9zIGVudGVyYQoJcmV0dXJuIG1pU3RyRW5jb2RlKCRzdHJpbmcpOwp9CgpmdW5jdGlvbiBtaVN0ckVuY29kZSgkc3RyaW5nKSB7CiAgICAkZW50aXRpZXMgPSBhcnJheSgnJTIxJywgJyUyQScsICclMjcnLCAnJTI4JywgJyUyOScsICclM0InLCAnJTNBJywgJyU0MCcsICclMjYnLCAnJTNEJywgJyUyQicsICclMjQnLCAnJTJDJywgJyUyRicsICclM0YnLCAnJTI1JywgJyUyMycsICclNUInLCAnJTVEJyk7CiAgICAkcmVwbGFjZW1lbnRzID0gYXJyYXkoJyEnLCAnKicsICInIiwgIigiLCAiKSIsICI7IiwgIjoiLCAiQCIsICImIiwgIj0iLCAiKyIsICIkIiwgIiwiLCAiLyIsICI/IiwgIiUiLCAiIyIsICJbIiwgIl0iKTsKICAgIHJldHVybiBzdHJfcmVwbGFjZSgkZW50aXRpZXMsICRyZXBsYWNlbWVudHMsIHVybGVuY29kZSgkc3RyaW5nKSk7Cn0KCiRtaV91cmxfY29kaWZpY2FkYSAgICA9ICdodHRwczovL2VzLnN0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNDUyNzkvYyVjMyViM21vLWRldGVjdGFyLXNpLXVuYS11cmwtZXN0JWMzJWExLWNvZGlmaWNhZGEtZW4tcGhwJzsKJG1pX3VybF9zaW5fY29kaWZpY2FyID0gJ2h0dHBzOi8vZXMuc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI0NTI3OS9jw7Ntby1kZXRlY3Rhci1zaS11bmEtdXJsLWVzdMOhLWNvZGlmaWNhZGEtZW4tcGhwJzsKCiRhcnJheV9jb25fdXJsc1sndXJsX2NvZGlmaWNhZGEnXSAgICA9ICdodHRwczovL2VzLnN0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNDUyNzkvYyVjMyViM21vLWRldGVjdGFyLXNpLXVuYS11cmwtZXN0JWMzJWExLWNvZGlmaWNhZGEtZW4tcGhwJzsKJGFycmF5X2Nvbl91cmxzWyd1cmxfc2luX2NvZGlmaWNhciddID0gJ2h0dHBzOi8vZXMuc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI0NTI3OS9jw7Ntby1kZXRlY3Rhci1zaS11bmEtdXJsLWVzdMOhLWNvZGlmaWNhZGEtZW4tcGhwJzsKCnByaW50KG1pVXJsRW5jb2RlKCRtaV91cmxfY29kaWZpY2FkYSkgLiAiXG4iKTsKcHJpbnQobWlVcmxFbmNvZGUoJG1pX3VybF9zaW5fY29kaWZpY2FyKSAuICJcbiIpOwoKcHJpbnQobWlVcmxFbmNvZGUoJGFycmF5X2Nvbl91cmxzWyd1cmxfY29kaWZpY2FkYSddKSAuICJcbiIpOwpwcmludChtaVVybEVuY29kZSgkYXJyYXlfY29uX3VybHNbJ3VybF9zaW5fY29kaWZpY2FyJ10pIC4gIlxuIik7CgoKcHJpbnQobWlVcmxFbmNvZGUoJ3d3dy5mb28uYmFyL2VzcGHDsWEvJUFEL3PDrSUxMi8nKSAuICJcbiIpOwoKCg==