online - urlencode php
Descodificación de URL en PHP (5)
Estoy tratando de decodificar esta cadena URL utilizando la función urldecode de PHP:
urldecode("Ant%C3%B4nio+Carlos+Jobim");
Se supone que esto debe salir ...
''Antônio Carlos Jobim''
... pero en lugar de eso está superando esto
''Antônio Carlos Jobim''
He probado la cadena en un decodificador en línea basado en JS con gran éxito, pero parece que no puedo hacer esta operación en el lado del servidor. ¿Algunas ideas?
¿También está utilizando htmlenteties
antes de htmlenteties
en la página? Cuando acabo de probar tu código funcionó bien solo con el urldecode("Ant%C3%B4nio+Carlos+Jobim");
parte, pero cuando lo ejecuté a través de htmlentities
obtuve el mismo resultado que tú.
Parece ser un problema con los caracteres UTF-8 y cómo maneja PHP la función htmlentities
.
Cuando lo hago
<?php
echo urldecode("Ant%C3%B4nio+Carlos+Jobim");
?>
Se muestra correctamente en mi navegador como
Antônio Carlos Jobim
He probado con XAMPP
En realidad, obtienes el resultado deseado, pero no se interpreta como UTF-8. Si se trata de una aplicación HTTP, debe enviar un encabezado o una metaetiqueta (o ambas) que indiquen al cliente que use UTF-8.
Editar: por ejemplo:
// replace text/html with the content type you''re using
header(''Content-Type: text/html; charset=UTF-8'');
Su cadena también está codificada en UTF-8. Esto funcionará:
echo utf8_decode(urldecode("Ant%C3%B4nio+Carlos+Jobim"));
Salida: "Antônio Carlos Jobim".
otra opción es:
<?php
$smthing = ''http%3A%2F%2Fmysite.com'';
$smthing = preg_replace("/%u([0-9a-f]{3,4})/i","&#x//1;",urldecode($smthing));
$smthing = html_entity_decode($smthing,null,''UTF-8'');
echo $smthing;
?>
la salida se convierte en: http://mysite.com