Les caractères à deux octets dans querystring en utilisant PHP
-
23-09-2019 - |
Question
Je suis en train de comprendre comment créer urls personnalisées pour les langues à deux octets.
Par exemple, cette URL d'Amazon Japon a des caractères japonais dans le querystring (plus précisément, le chemin):
http://www.amazon.co.jp/風の谷のナウシカ-DVD-宮崎駿/dp/B00005R5J3/ref=sr_1_3?ie=UTF8&s=dvd&qid=1269891925&sr=8-3
Ce que je voudrais faire est d'avoir:
http://www.mysite.com/風の谷のナウシカ
ou même
http://www.mysite.com/index.php?name=風の谷のナウシカ
être en mesure de décoder correctement la chaîne de $GET[name]
.
Je pense que je l'ai essayé toutes les possibilités de urldecode
et utf8_decode
, mais je reçois juste charabia en réponse.
Tout cela fonctionne très bien sous une forme $_POST
, mais je dois ces urls être emailable ...
EDIT: Voici le code que je utilise:
<p>Original: <?= $_GET[str]; ?>
<br>Decode: <?= urldecode($_GET[str]); ?>
<br>Decode querystring: <?= urldecode($_SERVER[QUERY_STRING]); ?>
<p>
<?
while (list($var,$value) = each ($_SERVER)) {
echo "$var => $value <br />";
}
?>
La solution
Je l'ai!
Je avais besoin pour vous assurer que l'en-tête rapportait:
header ('Content-type: text/html; charset=utf-8');
Une fois que je l'ai fait, les personnages ont été interprétés correctement.
J'ai aussi trouvé ce qui est une très bonne ressource:
Autres conseils
Avez-vous essayé de lire la valeur GET directement? Comme avec $_SERVER['QUERY_STRING']
ou équivalent? Je suis assez sûr que la fonction de urldecode()
a encore quelques problèmes, même si elle est censé fonctionner avec UTF-8 depuis la version 5.0.
sur au php.net a quelques commentaires utiles , certains spécifiquement pour les cas japonais.