Question

J'apprends toujours les ficelles du métier avec PHP & amp; MySQL et moi savons que je ne fais pas bien ici avec la façon dont les jeux de caractères sont configurés, mais je ne peux pas vraiment comprendre ce que je devrais faire en lisant ici et sur le Web.

J'ai une installation standard de LAMP avec PHP 5, MySQL 5. J'ai tout configuré avec les paramètres par défaut. Lorsque certains de mes utilisateurs saisissent des commentaires dans notre base de données, certains caractères ne s'affichent pas correctement - principalement des apostrophes et des tirets au moment même. Dans MySQL, les apostrostrophes apparaissent sous la forme «. Ils apparaissent également sur la page (j'utilise htmlentities pour afficher les commentaires des utilisateurs).

Dans phpMyAdmin, il est indiqué que mon jeu de caractères MySQL est UTF8-Unicode.

Dans ma base de données, mes tables sont toutes configurées avec le paramètre par défaut Latin1-Swedish-ci.

Mes pages Web ont toutes la méta http-equiv = " Content-Type " content = & text; text / html; jeu de caractères = utf-8 "

Quand je regarde les en-têtes http du site, je vois: Content-Type: text / html

Comme un débutant, je n'avais pas du tout envisagé les jeux de caractères jusqu'à ce que les choses aient commencé à paraître étranges sur certaines de mes pages. Alors, est-il logique de tout convertir en utf-8 et cela affectera-t-il mon code PHP? Ou devrais-je essayer d'obtenir tout cela en latin? Et dois-je aller dans la base de données et remplacer ces codes impairs, ou seront-ils affichés comme par magie une fois que j'ai configuré correctement les jeux de caractères? Tout le jeu que j'ai fait jusqu'à présent n'a pas aidé (j'ai défini les en-têtes http sur utf-8 et j'ai également essayé le latin).

Était-ce utile?

La solution

http://www.phpwact.org/php/i18n/charsets

Ce site m’a donné beaucoup de bons conseils sur la façon de tout mettre en valeur dans UTF-8.

J'ai également recommandé de passer de htmlentities à htmlspecialchars car il est plus convivial pour UTF.

L’essentiel est de s’assurer que tout parle le même langage. Votre base de données, votre connexion à la base de données, votre PHP, votre page est dans utf8 (devrait avoir une balise meta et un en-tête le disant).

Autres conseils

Si vous voulez vraiment comprendre ces problèmes, je commencerai par lire cet article sur mysql.com . En gros, vous voulez que chaque pièce du puzzle prenne la forme unicode UTF-8. Du côté de PHP, vous voulez faire quelque chose comme:

<?php header("Content-type: text/html; charset=utf-8");?>
<html>
  <head>
     <meta http-equiv="Content-type" value="text/html; charset=utf-8">

Et lorsque vous exécutez vos requêtes d'insertion, vous voulez vous assurer que le codage de caractères de la table et , ainsi que le codage dans lequel vous exécutez les requêtes, sont au format UTF-8. Pour ce faire, vous pouvez exécuter la requête SET NAMES utf8 juste avant l’exécution d’une requête d’insertion.

Désolé de ne pas comprendre toute votre question. Mais quand une partie de la question est "UTF-8 ou non?", La réponse est: "UTF-8, bien sûr!"

Vous voulez vraiment régler les problèmes maintenant plutôt que plus tard. L’une des règles de programmation les plus importantes est de ne pas continuer avec une mauvaise idée. Ne vous enfoncez pas plus profondément!

Etant donné que latin1 et utf-8 sont compatibles, vous pouvez convertir vos tables afin qu’elles utilisent utf-8 sans manipuler les données contenues à la main. MySQL va trier cette partie pour vous.

Il est ensuite important de vérifier que tout parle en utf-8. Définissez les en-têtes http dans Apache ou utilisez une balise META. Cela indique à un navigateur que la sortie HTML est au format utf-8.

Dans cet esprit, vous devez vous assurer que toutes les données que vous envoyez sont bien au format utf-8! Configurez votre IDE pour enregistrer les fichiers php / html au format utf-8. Enfin, assurez-vous que PHP utilise une connexion utf-8 avec MySQL - lancez cette requête après la connexion:

SET NAMES 'utf-8';
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top