2009-11-18 26 views
24

Estoy intentando decodificar esta cadena URL usando la función de PHP urldecode:URL decodificación en PHP

urldecode("Ant%C3%B4nio+Carlos+Jobim"); 

Esto se supone que es la salida ...

'Antônio Carlos Jobim' 

... pero en su lugar se ouptutting este

'Antônio Carlos Jobim' 

he probado la cadena en un JS-based online decoder con gran éxito, pero parece que no puede hacer esto operati en el lado del servidor. ¿Algunas ideas?

+1

¿Qué método se está utilizando para dar salida a ella? – Kazar

Respuesta

47

Su cadena es también codificada en UTF-8. Esto funcionará:

echo utf8_decode(urldecode("Ant%C3%B4nio+Carlos+Jobim")); 

Salida: "Antônio Carlos Jobim".

+4

sólo si la página declaró 'ISO-8859-1' codificación. – Kornel

12

En realidad, se obtiene el resultado deseado, pero no se interpreta como UTF-8. Si esto es en una solicitud HTTP, debe enviar un encabezado o una etiqueta meta (o ambos) que decirle 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'); 
1

es que también están utilizando htmlenteties antes haciendo eco a la página? Cuando probé tu código funcionó bien con solo la parte urldecode("Ant%C3%B4nio+Carlos+Jobim");, pero cuando lo ejecuté en htmlentities obtuve el mismo resultado que tú.

parece ser un problema con los caracteres UTF-8 y la forma en PHP se encarga de la función htmlentities.

+1

Funciona correctamente si se especifica la codificación correcta como el parámetro 'charset' $. Y de todos modos, debería usar 'htmlspecialchars', no' htmlentities', si todo lo que quiere hacer es protegerse de XSS. –

1

cuando lo haga

<?php 
echo urldecode("Ant%C3%B4nio+Carlos+Jobim"); 
?> 

Su pantalla correctamente en mi navegador como

Antônio Carlos Jobim

He probado con XAMPP

0

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; 
?> 

salida se convierte en: http://mysite.com