J'essaie de décoder cette chaîne d'URL en utilisant la fonction urldecode de PHP:
urldecode("Ant%C3%B4nio+Carlos+Jobim");
Ceci est censé produire ...
'Antônio Carlos Jobim'
... mais élimine plutôt cela
'Antônio Carlos Jobim'
J'ai testé la chaîne dans un décodeur en ligne basé sur JS avec un grand succès, mais je n'arrive pas à faire cette opération côté serveur. Des idées?
Votre chaîne est aussi UTF-8 codé. Cela fonctionnera:
echo utf8_decode(urldecode("Ant%C3%B4nio+Carlos+Jobim"));
Sortie: "Antônio Carlos Jobim".
En fait, vous obtenez le résultat souhaité, mais cela n’est pas interprété comme UTF-8. S'il s'agit d'une application HTTP, vous devez envoyer un en-tête ou une balise méta (ou les deux) indiquant au client d'utiliser UTF-8.
Edit: par exemple:
// replace text/html with the content type you're using
header('Content-Type: text/html; charset=UTF-8');
quand je fais
<?php
echo urldecode("Ant%C3%B4nio+Carlos+Jobim");
?>
Son affichage correctement dans mon navigateur comme
Antônio Carlos Jobim
J'ai testé avec XAMPP
Utilisez-vous également htmlenteties
avant de le renvoyer à la page? Lorsque je viens de tester votre code, cela fonctionnait bien avec uniquement la partie urldecode("Ant%C3%B4nio+Carlos+Jobim");
, mais lorsque je l'ai exécuté dans htmlentities
, j'ai obtenu le même résultat que vous.
Cela semble être un problème avec les caractères UTF-8 et la façon dont PHP gère la fonction htmlentities
.
une autre option est:
<?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 sortie devient: http://mysite.com