Préface :
Pour être honnête,
Sandals pense également que l'UTF8 est une bonne chose...
Après tout, montrer la Chine, le Japon et la Corée du Sud sur le même écran est très attractif pour les Asiatiques de l’Est…
(Bien sûr, les avantages ne se limitent pas à cela...)
Pas seulement des programmes Web…
Les noyaux de nombreuses applications commencent à utiliser l'encodage Unicode...
Le but est évident : prendre en charge l'affichage multilingue...
Tous les logiciels Microsoft sont basés sur Unicode...
Les logiciels japonais peuvent donc s'afficher normalement sur votre XP chinois...
Et le chinois 98 provoquera des caractères tronqués lors de l'installation de logiciels dans d'autres langues sur le noyau GB...
Quant à UTF8,
On peut dire que c'est une branche d'Unicode.
Il utilise trois octets pour enregistrer un caractère chinois...
(Unicode utilise quatre octets)
Les logiciels d'application ont collectivement fait défection vers Unicode...
Ne sommes-nous pas autorisés à utiliser UTF8 dans les applications Web ?
Dans cet article, Sandals tentera d'introduire la programmation PHP sous encodage UTF8 sous autant d'aspects que possible...
Quant à savoir pourquoi le « chinois » est introduit séparément...
Premièrement, c’est parce qu’il n’est vraiment pas nécessaire de considérer UTF8 lorsqu’il s’agit d’anglais…
Sauf si vous envisagez de créer un système multilingue...
(Je voudrais faire quelques reproches : les étrangers d’aujourd’hui ne prêtent pas du tout attention à cette question lorsqu’ils écrivent des programmes...)
Deuxièmement, les méthodes de traitement des langages multi-octets comme la Chine, le Japon et la Corée sous encodage UTF8 sont en réalité très similaires...
Suivez simplement la gourde et tirez la cuillère...
D'accord... commençons par la partie traitement de la base de données...
===========================================
Connexion à la base de données
De nombreuses personnes constateront que les données sont gâchées lors de la mise à niveau vers Mysql 4.1...
En fait, c'est parce que Mysql prend en charge les jeux de caractères à partir de la version 4.1...
Et le jeu de caractères par défaut est UTF8...
(Preuve complète de l'importance de l'intégration aux normes internationales... Héhé...)
Dans le passé, nous utilisions principalement l'encodage utf8 ou GBK...
Bien sûr, les données de sortie sont tronquées...
Pour résoudre le code tronqué...
Vous devez indiquer au programme quelles données d'encodage obtenir...
Nous supposons que votre base de données précédente était codée en utf8...
mysql_query('SET CHARACTER SET utf8') ou die("Query failed : " . mysql_error());
avant la requête.
Bien sûr, puisque cela n'est requis que pour la version 4.1 et supérieure,
Nous pouvons donc ajouter un jugement :
$mysqlversion = $db->query_first("SELECT VERSION() AS version");
si ($mysqlversion['version'] >= '4.1')
{
mysql_query('SET CHARACTER SET utf8') ou die("La requête a échoué : " . mysql_error());
}
De cette façon, quel que soit l'encodage par défaut de Mysql, vous pouvez y accéder normalement...
(Peu importe que vous déposiez pendant la période de survie, que vous déposiez pour une durée déterminée, ou même que vous retiriez par petites sommes...)
Cependant, tout le monde est international...
Utilisez-vous toujours utf8 ?
Comment le transcoder ?
en plus……
Que dois-je faire si des caractères tronqués apparaissent lors de la mise à niveau des données ?
Salade!
Écoutons la répartition la prochaine fois…
=========================================== === =
Les données doivent être mises à niveau vers 4.1
...
Il faut d'abord l'exporter...
Dire que les étrangers sont vraiment irresponsables...
La méthode d'exportation précédente perdait toujours certains caractères chinois...
Par exemple, remplacez "J'aime ta mère" par "Je t'aime"...
(Habituellement, le dernier mot d'une donnée est perdu)
Le tout a une génération de retard...
(Pour reprendre les mots de Sœur Pomegranate, "Le fait d'un acte aussi rebelle est vraiment excitant"...)
Pour protéger votre cœur fragile...
Également afin de maintenir l'éthique et la morale traditionnelles chinoises...
Vous pouvez modifier les champs dont les données contiennent des caractères chinois en codage binaire...
La méthode spécifique...
Vous pouvez exécuter cette instruction :
ALTER TABLE `nom de la table` CONVERT TO CHARACTER SET binaire ;
De cette façon, les champs de type caractère tels que :
CHAR, VARCHAR et TEXTE
sera converti en
BINAIRE, VARBINAIRE et BLOB
Puis exportez et importez dans l'environnement 4.1...
Bien entendu, la dernière tâche fastidieuse est :
Vous devez modifier leurs types...
Il y a une mise à niveau vers 4.1...
Bien sûr, il y a aussi des déclassements...
Comment rétrograder ? ? ?
Des sandales pour aller aux toilettes...
Et s'il vous plaît, passez à la page suivante...
========================================= ==== ===
Les données ont été rétrogradées par rapport à la version 4.1.
Certaines personnes ont constaté que les fichiers SQL exportés à partir de la version 4.1 ne pouvaient pas être importés dans des programmes de version inférieure...
Le problème est en fait très simple...
Et Mysql a déjà pensé à tout pour nous...
Veuillez ajouter le paramètre --compatible lors de l'exportation...
Nous supposons que votre base de données est codée en utf8...
Et la version cible de la base de données est 4.0…
Ensuite, écrivez ceci sur la ligne de commande :
shell>mysqldump --user=username --password=password --compatible=mysql40 --default-character-set=utf8 database > db.sql
Le fichier SQL ainsi exporté peut être importé avec succès dans la base de données de version inférieure...
La partie base de données est enfin terminée...
Mais comment devrions-nous prêter attention à la programmation PHP ?
Je dois vous demander de passer à la page suivante...
http://www.knowsky.com
==============================================
Encodage des fichiers PHP
Tous les fichiers PHP doivent-ils être convertis en encodage UTF8 ?
Les sandales vous disent NON...
disons-le ainsi...
Si le fichier contient des caractères chinois qui doivent être affichés...
Il doit être converti en codage UTF8...
Donnons un exemple :
// Je suis une sandale
temps d'écho();
Bien que le code ci-dessus ait du code...
Mais comme il existe dans l'annotation...
Aucune sortie...
Cette page n'a donc pas besoin d'être convertie au format UTF8...
Autre exemple :
echo "I am Sandals";
Cela a évidemment une sortie en caractères chinois...
Vous devriez simplement convertir en UTF8...
Bien sûr, de nombreux programmes utilisent désormais la technologie des modèles (packs linguistiques)...
Vous ne voyez aucun caractère à afficher dans le programme (fichier de package non linguistique)...
De cette façon, il nous suffit de convertir le fichier du pack de langue en codage UTF8...
(C'est l'avantage des packs de langue... Ahahahahaha...)
'http://www.knowsky.com
===================================================
Interception chinoise UTF8
car UTF8 utilise trois octets...
La fonction substr traditionnelle est donc inutile...
De nombreux experts ont écrit des fonctions d'interception de caractères chinois UTF8...
En voici quelques-uns :
1. Calculez d'abord, puis prenez
/**
* Auteur : Dummy |
* E-mail : [email protected] | hotmail.com
*Créer : 200512
* Utilisation : echo join('', String::subString_UTF8('Caractères chinois', 0, 1));
*/
ini_set('display_errors', 1);
rapport d'erreur(E_ALL ^ E_NOTICE);
chaîne de classe {
fonction subString_UTF8($str, $start, $lenth)
{
$len = strlen($str);
$r = tableau();
$n = 0 ;
$m = 0 ;
pour($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = base_convert(ord($x), 10, 2);
$a = substr('00000000'.$a, -8);
si ($n < $start){
si (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$je += 1 ;
}elseif (substr($a, 0, 4) == 1110) {
$je += 2 ;
}
$n++ ;
}autre{
si (substr($a, 0, 1) == 0) {
$r[] = substr($str, $i, 1);
}elseif (substr($a, 0, 3) == 110) {
$r[] = substr($str, $i, 2);
$je += 1 ;
}elseif (substr($a, 0, 4) == 1110) {
$r[] = substr($str, $i, 3);
$je += 2 ;
}autre{
$r[] = '';
}
si (++$m >= $longueur){
casser;
}
}
}
retourner $r ;
} // Fin de subString_UTF8
}//Fin de chaîne
echo join('', String::subString_UTF8('Caractères chinois', 0, 1));
2. Je trouve que c'est très astucieux de couper d'abord les sandales puis de les couper ensuite...
Utilisez la fonction d'interception traditionnelle pour tronquer en premier...
Déterminez ensuite si un seul caractère chinois est divisé...
Si c'est le cas... alors traitez-le...
Il est important de noter que le troisième paramètre de la fonction substr doit être supérieur à 3...
Quant à la raison pour laquelle vous n’utilisez pas de sandales, pouvez-vous l’expliquer ?
// Une fonction trim pour supprimer le dernier caractère d'une chaîne utf-8
// en suivant les instructions sur http://en.wikipedia.org/wiki/UTF-8
// dotann
// utilisation : $str = utf8_trim(substr($str,0,50));
fonction utf8_trim($str) {
$len = strlen($str);
pour ($i=strlen($str)-1; $i>=0; $i-=1){
$hex .= ' '.ord($str[$i]);
$ch = ord($str[$i]);
if (($ch & 128)==0) return(substr($str,0,$i));
if (($ch & 192)==192) return(substr($str,0,$i));
}
return($str.$hex);
}
$str = 'Caractères chinois' ;
echo utf8_trim(substr($str,0,3));
3. Il existe d'autres méthodes,
Par exemple, 007pig est une fonction écrite dans la version chinoise de notre vBulletin...
Court et doux...
Il n'est pas pratique de publier le code source...
Désolé Bird...
Je vais terminer mon écriture ici aujourd'hui...
Il y a aussi des problèmes comme le transcodage qui n'ont pas été écrits...
Occupé ces derniers temps...
Continuez à vous organiser quand vous avez le temps...
http://www.quchao.com/?p=6&pp=1