2009-10-14 7 views
0

J'ai PHP parlant à SQLServer via ODBC en utilisant FreeTDS et unixODBC. J'ai suivi tutorials pour obtenir cette configuration. Cela fonctionne bien maintenant, bien que les caractères spéciaux dans la base de données ne s'affichent pas correctement. Plus précisément, le symbole ™. Il apparaît dans le navigateur en tant que . J'ai essayé de définir client charset = UTF-8 dans la section [global] de freetds.conf. J'ai essayé iconv('UCS-2', 'UTF-8', $str) et mb_convert_encoding($str, 'UTF-8', 'UCS-2') dans PHP et les deux résultent en jeux de caractères asiatiques (䐧祲圠攮戮餮吠渭捥❫). Je suis perplexe! Quelqu'un a des conseils?Les données SQLServer en PHP perdent les caractères multi-octets

Un autre élément qui mérite d'être mentionné: Lorsque je cours ce code sur ma machine locale, je n'ai pas ces problèmes. Le ™, par exemple, se montre bien. Ma machine locale est un mac et j'utilise Actual Technologies ODBC driver. Là où j'ai des problèmes, c'est notre serveur web LAMP. Cela m'amène à croire que le problème réside dans la configuration du pilote. Ou éventuellement Linux doit être informé de l'UTF-8?

+0

Je suppose que les colonnes de votre base de données sont des NVARCHAR. (Qui peut contenir Unicode, contrairement aux VARCHARs habituels) – SLaks

+0

Effectivement, c'est nchar – weotch

Répondre

0

Comme cela apparaît dans le navigateur avec ce symbole, avez-vous confirmé que le jeu de caractères de la page HTML est correct?

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

Si oui, avez-vous confirmé que vous utilisez le type de données correct pour la colonne?

+0

C'est là dedans. Je peux faire écho directement un symbole UTF-8 et ça se voit. Ce sont leurs données de base de données qui sont foiré. Voir ici: http://i38.tinypic.com/2mn3q84.jpg. Le TM est renvoyé par PHP. L'autre chose est ce que je reçois de la DB. – weotch

+0

D'accord, le TM est bien, qu'est-ce qui ne l'est pas? Votre message original indique que la MT apparaît comme le symbole du point d'interrogation. Pouvez-vous poster le texte entier que vous voulez stocker maintenant que vous avez posté un exemple d'image de la sortie? – mimetnet

+0

Ce texte devrait être: ™ 'Dry W.E.B. ™ T-Neck'. En PHP, le code qui génère ressemble à: echo '™'; echo $ row ['nom']; Aussi, consultez le nouveau paragraphe que j'ai ajouté à la description du problème. – weotch

Questions connexes