Affichage caractères chinois

  • Auteur de la discussion Auteur de la discussion poupilou
  • Date de début Date de début
WRInaute passionné
Salut à tous,

J'ai un vieux site en chinois que je voudrais relooker, j'utilise pour l'instant sur ce site une balise meta language <meta name="language" content="zh-CN" /> pour afficher correctement les caractères chinois.

1) Lorsque je regarde le code source de http://www.baidu.com (le moteur de recherche chinois), il n'y a pas de balise language dans leur code html et pourtant les caractères chinois s'affichent parfaitement bien, comment cela est possible ?

2) Lorsque je regarde le code source de mon site, les caractères chinois apparaissent sous cette forme "ÐÅ×꣺×êʯµÄÊÀ½ç£¬´Ó¿ó³¡µ½Ö鱦µê" alors que dans le code source du site de baidu les caractères chinois s'affichent normalement (sans qu'ils aient de balise language dans leur code source), comment cela est possible ?

3) Quelles seraient les balises d'en-têtes et meta à mettre dans le code html pour avoir un site "propre" en chinois, pour l'instant j'ai cela :

Code:
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">
<html>
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=gb2312" />
<meta name="language" content="zh-CN" />
<meta name="robots" content="index,follow" />
</head>
etc ......................

Merci pour vos réponses.
 
WRInaute accro
Ce n'est absolument pas avec la meta language mais plutôt:
PHP:
<span class="syntaxdefault"></span><span class="syntaxkeyword"><</span><span class="syntaxdefault">meta&nbsp;http</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">equiv</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"content-type"&nbsp;</span><span class="syntaxdefault">content</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"text/html;charset=utf-8"</span><span class="syntaxkeyword">>&nbsp;</span><span class="syntaxdefault"></span>
En HTML5:
PHP:
<span class="syntaxdefault"></span><span class="syntaxkeyword"><</span><span class="syntaxdefault">meta&nbsp;charset</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"UTF-8"</span><span class="syntaxkeyword">>&nbsp;</span><span class="syntaxdefault"></span>

+ Les entêtes HTTP correspondants:
Code:
Content-Type: text/html; charset=utf-8
 
WRInaute passionné
Mersi Spout.

1) A quoi sert la meta language ? Faut-il mettre encore mettre cette balise dans notre code html ?

2) Comment un crawler peut-il connaitre/détecter la langue d'un site sans la meta language ou une autre indication sur la langue qui est utilisé sur le site qu'il crawl ?
 
WRInaute passionné
Ce que j'ai du mal à comprendre c'est lorsque je regarde avec mon bloc-notes le code source de https://www.google.com.hk les caractères chinois s'affichent correctement mais lorsque je regarde avec le même bloc-notes le code source de mon site chinois je vois ceci "ÐÅ×꣺×êʯµÄÊÀ½ç£¬´Ó¿ó³¡µ½Ö鱦µê" alors que les caractères chinois s'affichent bien pour mon site chinois dans tous les navigateurs internet :(

Pour l'instant j'ai ce code sur mon site chinois :
Code:
<html>
<head>
<title>ÐÅ×꣺×êʯµÄÊÀ½ç£¬´Ó¿ó³¡µ½Ö鱦µê</title>
<meta name="description" content="¼Ó¹¤×êʯÓëëÅ÷×êʯ£ºÌØÕ÷£¬Ã³Ò×£¬½¨Ò飬¼Û¸ñ£¬¼ø¶¨£¬½»Ò×Ëù£¬ÏîÄ¿£¬³ö²ú¹ú£¬µØÖÊ£¬¿ª²É£¬¿óʯµÄ´¦Àí£¬¹¤¾ß£¬É豸£¬ÍøÕ¾Ãû¼¡£">
<meta name="keywords" content="×êʯ£¬½ð¸Õʯ£¬¼Ó¹¤£¬Ã«Å÷£¬Ô­Ê¯">
<meta http-equiv="Content-Type" content="text/HTML; charset=gb2312">
<meta name="language" content="zh-CN">
<meta name="robots" content="index,follow">
etc ....
</head>

Comment Google peut-il détecter la langue de mon site s'il regarde uniquement le code source (sans utiliser la balise meta language), il verra ceci "ÐÅ×꣺×êʯµÄÊÀ½ç£¬´Ó¿ó³¡µ½Ö鱦µê" ?

J'ai testé en local avec la config ci-dessous mais les caractères chinois sur mon site ne s'affichent pas, je vois plein de carrés à la place des caractères chinois :
Code:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
etc .....
</head>
Même si je rajoute la balise <html lang="zh-CN"> au code-ci-dessus ça ne marche pas mieux :(
 
WRInaute accro
Tes fichiers HTML (PHP) doivent être enregistrés dans le même encodage, et s'il y a des headers HTTP qui définissent le charset, il doit être identique. Idem pour la DB, etc...

Le html lang n'y changera rien du tout, tu as juste un problème d'encodage.
 
WRInaute passionné
Les fichiers php de mon site chinois et ma BD ne sont pas encodés en UTF-8, connais-tu un script ou un outil qui puisse convertir tous mes fichiers php en UTF-8 ? Je vais profiter de ce relookage pour tout convertir en UTF-8 (fichiers et BD).

Comment connaitre l'encodage d'un fichier php ?
 
WRInaute passionné
Je ne connaissais pas Notepad++, il est pas mal ce logiciel pour convertir les fichiers en UTF-8 (sans BOM), je vais pouvoir me dépatouiller avec lui.

Merci pour ton aide précieuse :D
 
WRInaute passionné
J'ai converti mes anciens fichiers php en UTF-8 ainsi que l'un de mes tables MySQL, les caractères chinois sont bien visibles dans ma tables MySQL mais lorsque j'effectue une requête MySQL les caractères chinois ne s'affichent pas correctement et j'ai des "?????" à la place. Ou est le problème ?

Voici le code source de ma page essais.php :
Code:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="robots" content="index,follow">
<title>?????: ???????</title>
<meta name="description" content="">
<meta name="keywords" content="">
</head>
<body>
?????: ???????
<br><br>
</body>
</html>
Et ma table MySQL :
Code:
CREATE TABLE IF NOT EXISTS `url_cn` (
  `page` varchar(250) NOT NULL DEFAULT '',
  `nom_cn` varchar(250) NOT NULL DEFAULT '',
  `url_cn` varchar(250) NOT NULL DEFAULT '',
  `titre_cn` varchar(250) NOT NULL DEFAULT '',
  `description_cn` varchar(250) NOT NULL DEFAULT '',
  `mot_cle_cn` longtext NOT NULL,
  `hit_cn` int(11) NOT NULL DEFAULT '0',
  `groupe` int(2) NOT NULL DEFAULT '0',
  `tri` int(3) DEFAULT NULL,
  `sitemap` int(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`page`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
WRInaute passionné
J'ai trouvé :)
En faite, il faut spécifier le "set names" dans la requête MySQL, comme cela :
Code:
mysql_query("set names 'utf8'");
Etant donné que toute ma base de donnée est en latin1_swedish_ci et qu'elle est utilisée par plusieurs de mes sites, je ne me vois pas convertir toutes les tables mysql ainsi que toutes les pages php (de tous mes sites) en UTF-8, cela demanderait un trop gros travail :?

Je vais donc garder mes tables MySQL en latin1_swedish_ci, ne pas convertir en UTF-8 les pages php de mon site chinois et adapter l'en-têtes et le charset de mon site chinois.

Une question : est-il gênant pour le référencement de mon site chinois que l'on trouve dans le code html cela "¼Ó¹¤×êʯµÄÊÀ½ç" au lieu de cela "加工钻石的世界" ?
 
WRInaute accro
Envoie le charset dans les headers HTTP aussi, ça devrait corriger le problème.

NB: mysql_query() est obsolète depuis PHP 5.5 et complètement supprimé en PHP7, il faut commencer à envisager de changer.
 
WRInaute passionné
spout a dit:
Envoie le charset dans les headers HTTP aussi, ça devrait corriger le problème.
Qu'est-ce que tu entends par envoyer le charset dans les headers HTTP aussi ? :(
spout a dit:
NB: mysql_query() est obsolète depuis PHP 5.5 et complètement supprimé en PHP7, il faut commencer à envisager de changer.
J'ai toujours un train de retard, je suis encore en php 5.3 en local sur mon ordi... et le php7 est déjà fonctionnel :?

J'ai raté un train ou il n'y a pas eu de php6 ?
 
WRInaute discret
mysql_query("set names 'utf8'");
si je dis pas de bêtises il me semble que t'as une solution pour le définir lors de la connexion à ta base de données en php:
Code:
$ConnectSQL = mysql_connect($config['Host'], $config['User'], $config['Pass']) or die ("Erreur lors de la connection a la base de données");
mysql_set_charset('utf8',$ConnectSQL);

ça existe aussi pour mysqli il me semble
 
WRInaute passionné
D'après ce qu'ils disent sur le lien de Marie-Aude :
...le chiffre « 6 » transmet selon les tenants de la version 7 une idée d’échec : « La version 6 est en général associée à l’échec dans le monde des langages dynamiques. PHP 6 a été un échec ; Perl 6 a été un échec. Il est en fait associé à l’échec, même en dehors du monde des langages dynamiques : MySQL 6 existait, mais n’a jamais été publié ». Il y a donc un problème de perception sur le chiffre...
On comprend mieux pourquoi il n'y aura pas de php6 :wink:

Merci gotgot pour ton bout de code.
 
WRInaute accro
Strip-Meme-PHP6-650-final.jpg

:mrgreen:

Source: http://www.commitstrip.com/fr/2015/05/26/php-7-twice-faster-than-php-5/
 
WRInaute passionné
:) :D :lol: :mrgreen:

Afin d'être mieux positionné sur le moteur de recherche chinois Baidu il faut que notre site web soit hébergé sur une adresse IP chinoise. La solution consiste à héberger notre site sur un serveur localisé en Chine afin d'avoir cette fameuse IP chinoise mais cela engendre des coûts supplémentaire de frais d'hébergement et il faut migrer tous les fichiers et la BD sur ce serveur chinois :(

N'y a-t-il pas une autre solution pour obtenir une adresse IP chinoise pour son site web sans tout migrer en Chine ?
 
WRInaute passionné
J'héberge mes sites chez OVH mais ils ne proposent pas d'IP chinoises en géolocalisation.

S'il faut trouver un autre hébergeur alors autant trouver un hébergeur en Chine mais j'aurais préféré pouvoir trouver une autre solution technique en laissant l'hébergement de mon site chinois chez OVH... voyez-vous une solution ?
 
Discussions similaires
Haut