2010-09-06 5 views
2

J'ai une question! Je veux imprimer une chaîne unicode en php (comme 'سلام')! mais quand j'utilise l'écho seulement certains ??? une poire!!!Unicode string php

que ferais-je ??? Cela arrive quand je veux cho chaîne récupérée de la base de données!

echo 'سلام'; 
résultat

est:

???? 

J'ai essayé d'utiliser la fonction d'en-tête, mais cela ne m'a pas aidé!

+0

Est-ce que vous spécifiez le bon codage de caractères? – Gumbo

+0

Je ne sais pas pourquoi cela a été rejeté, la question est parfaitement valide. La solution que j'ai finalement trouvée fonctionne ici: http://stackoverflow.com/questions/2446778/how-to-display-unicode-data-with-php – Wex

Répondre

6

Vous devez faire trois choses:

  1. Assurez-vous de recevoir les données sous forme de données UTF-8. Pour MySQL, interrogez SET NAMES 'utf8' avant de sélectionner des enregistrements.
  2. Assurez-vous d'utiliser les fonctions compatibles UTF-8 lorsque vous manipulez des chaînes UTF-8.
  3. Assurez-vous de régler le codage de sortie sur UTF-8. Pour HTML, cela peut être fait en définissant l'en-tête HTTP Content-type sur (par exemple) text/html; charset=utf-8.

Bien sûr, remplacez "UTF-8" par n'importe quel encodage qui supporte les caractères dont vous avez besoin. Il n'est pas nécessaire de modifier les tables de la base de données (à l'exception des gains de performances possibles). Vous devrez peut-être changer de modèles HTML, etc. si vous choisissez UTF-16 ou autre chose qui n'est pas (pour la plupart) compatible ASCII.

+0

Si vous prévoyez de stocker des données Unicode dans mysql, vous devez utiliser un jeu de caractères qui le supporte. Par défaut, Mysql utilise latin1, mais vous pouvez passer à utf-8. – troelskn

+0

@troelskn, je suppose que les données étaient déjà stockées correctement. J'ai mentionné la modification des tables de base de données car, disons, si le site passe en UTF-16, le jeu de caractères de la base de données n'a pas besoin d'être modifié, car la conversion est faite pour vous. – strager

2

Vous devez déclarer le codage de caractères utilisé dans la réponse HTTP. Vous pouvez utiliser le header function: Avec cette sortie

header('Content-Type: text/html;charset=utf-8'); 

est déclarée HTML avec le codage des caractères UTF-8. Notez que vous ne pouvez pas utiliser header lorsque vous avez déjà envoyé des données au client sans le mettre en mémoire tampon. Donc, soit utiliser le output control pour mettre en tampon la sortie afin que vous puissiez modifier l'en-tête bien qu'il y ait déjà eu une sortie ou utiliser header avant toute sortie.

+0

Merci beaucoup mais comme je l'ai dit Ça n'a pas marché !! ! – undone

0

Peut-être que je suis un peu trop tard, mais cela a fonctionné pour moi:

echo utf8_encode('سلام');