OVH Cloud OVH Cloud

multilingue

17 réponses
Avatar
lolodev
bonjour

je travaille sur un site multilingue

en l'occurence en ce moment sur la langue polonaise

le menu du site se construit dynamiquement à partir de datas d'une
base myslq4
la table menu est en utf8-unicode

ma page posséde un charset: utf-8
je suis obligé de codé sous forme hexa les caractéres particuliers de
la langue polonaise comme &#263 = c accent
dans la table mysql des menus-

comment procéder ??

merci

7 réponses

1 2
Avatar
lolodev
je ne trouve pas de charset dans le header http


je reste bouche bé : comment celà se configure ? via un header php ?


tu as un
<meta http-equiv="Content-Type" content="text/html; charset=iso8859-1">


oui je faisais des essais

tes entités sont "mals" codées
Nowo&#347ci => Nowo&#347;ci
---------------------------------^
oui je corrige


merci

Avatar
lolodev
j'ai ajouté un header('Content-type: text/html; charset=utf-8'); en
entete

et du coup tous mes caractéres accentués sont passé avec des
caractéres chinois sauf ceux qui sont htmlisés via entités
et le caractére ? est resté ? alors que la table est en utf-8 et
charset aussi maintenant ...
a ne plus comprendre mon latin :)
Avatar
Thief13
oups ça m'interresse car j'utilise l editeur wysiwyg fck
où celà se configure ?
merci


C'est dans le fckconfig.js, tu met toute ces lignes sur true :

FCKConfig.ProcessHTMLEntities = true ;
FCKConfig.IncludeLatinEntities = true ;
FCKConfig.IncludeGreekEntities = true ;

FCKConfig.ProcessNumericEntities = true ;


c'est surtout ProcessNumericEntities qui compte. sinon, c'est tout
expliqué dans la doc de FCK, mais cette option est assé récente, donc
utilise une version récente de FCK

Avatar
Thief13
j'ai ajouté un header('Content-type: text/html; charset=utf-8'); en
entete

et du coup tous mes caractéres accentués sont passé avec des
caractéres chinois sauf ceux qui sont htmlisés via entités
et le caractére ? est resté ? alors que la table est en utf-8 et
charset aussi maintenant ...
a ne plus comprendre mon latin :)


En fait, il faut qussi que tes donné soient stocké en UTF-8 dans tas
base, et que tout tes fichiers de script soits enregistré en UTF-8,
sinon, il va par exemple, prendre de latin-1 et le faire traiter comme
de l'UTF-8...

Avatar
Olivier Miakinen

j'ai ajouté un header('Content-type: text/html; charset=utf-8'); en
entete

et du coup tous mes caractéres accentués sont passé avec des
caractéres chinois sauf ceux qui sont htmlisés via entités
et le caractére ? est resté ? alors que la table est en utf-8 et
charset aussi maintenant ...


Bien, le problème venait donc de là. Je viens de retrouver quelques
articles de Pierre Goiffon expliquant que l'on peut être connecté à
une table en UTF-8 de telle sorte que les échanges se fassent selon
un autre jeu de caractères :
http://groups.google.fr/groups/search?qºse+collation+author%3APierre+author%3Agoiffon+connexion

À tout hasard, vois ce que te dit ceci :
http://fr3.php.net/manual/fr/function.mysql-client-encoding.php

a ne plus comprendre mon latin :)


... et du coup tu es repassé en Latin-1. En tout cas, laisse cette ligne
de code (avec un charset ou un autre) plutôt que de ne rien mettre.

Avatar
lolodev
En fait, il faut qussi que tes donné soient stocké en UTF-8 dans tas
base, et que tout tes fichiers de script soits enregistré en UTF-8,
sinon, il va par exemple, prendre de latin-1 et le faire traiter comme
de l'UTF-8...


j'ai fait la mùanip suivante:

création d'une base ut8_unicode_ci
création du script:
<?php


header("Content-type: text/html; charset=utf-8");
$test = "é à è ü";
echo $test;

require "common.php";
require "variable.php.inc";
mysql_connect('localhost', 'mk2', 'mk2');
$q = "select * from libpol";
$res3 = mysql_db_query('test',$q);
while ($ln2=mysql_fetch_array($res3))
{
echo "pol".$ln2[lib];
}

?>
et sauvegarde en utf-8 (d'ailleurs l'affichage des caractéres accents
origines a changé dans $test)
insertion d'un texte polonais dans le champ de la table

resultat sur un browser:
é à è üpolJak znale?? terapeut?

les caractéres accentués latin sont bien respectés mais pas le
polonais en utf8 ?????

Avatar
Olivier Miakinen
[ Attention, envoi en Windows CP1252 pour un caractère non Latin1 ]


header("Content-type: text/html; charset=utf-8");
$test = "é à è ü";
echo $test;


Donc tes caractères « français » proviennent tous directement du fichier
PHP...

echo "pol".$ln2[lib];


... tandis que le c accentué provient de la base de données.

resultat sur un browser:
é à è üpolJak znale?? terapeut?

les caractéres accentués latin sont bien respectés mais pas le
polonais en utf8 ?????


Rectification : les caractères provenant de ton fichier PHP sont bien
respectés, mais pas ceux provenant de la base. Rien de magique, donc,
entre Latin-1 et les autres jeux de caractères.

Essaye avec cette nouvelle valeur de $test : $test = "é ć è ü";

1 2