Discussion:
multilingue
(trop ancien pour répondre)
lolodev
2007-02-22 13:25:16 UTC
Permalink
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
Olivier Miakinen
2007-02-22 15:34:51 UTC
Permalink
Post by lolodev
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
Ok.
Post by lolodev
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-
Tiens ? Pourquoi donc ? Si à la fois ta table et ta page sont en utf-8,
tu n'as pas besoin d'utiliser les entités numériques. Cela dit, si tu
les utilises, fais-le correctement (« ć » et non pas « &#263 »)
même si cela semble marcher comme ça dans Internet Explorer 6.
Post by lolodev
comment procéder ??
Comment procéder pour quoi faire exactement ?
Thierry
2007-02-22 15:34:51 UTC
Permalink
si tout est comme tu le dis... tu n'as rien à faire à part t'assurer
que ta base mysql est bien remplie.

le fichier test.php joint écrit le caractère polonais que tu cites dans une
table mysql dont
le charset EST utf8, et ce sans appliquer aucune conversion.
le même script affiche le contenu de la table dans une page dont le charset
EST utf8.
Le caractère polonais est correctement affiché.

test.php
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>

<?php
require_once('MDB2.php');
$db = MDB2::connect("mysql://root:***@localhost/test");
if ( isset($_REQUEST['test']) ) {
$req = "insert into test values (null, \"{$_REQUEST['test']}\")";
$res = $db->query($req);
}
$req = "select * from test";
$res = $db->query($req);
echo "<table>";
while ( $row = $res->fetchRow(MDB2_FETCHMODE_ASSOC) ) {
echo "<tr><td>{$row['id']}</td><td>{$row['text']}</td></tr>";
}
echo "</table>";
?>

<form>
<input type='test' value='&#263;' name='test' /><br />
<input type='submit' />
</form>
</body>

</html>
lolodev
2007-02-23 09:07:16 UTC
Permalink
si tout est comme tu le dis... tu n'as rien à faire à part t'assurer
que ta base mysql est bien remplie.
La traduction polonaise m'a été donnée sous forme d'un doc pdf que
j'ai copie/colle depuis w2000 dans une base mysql installee
sur un serveur linux via phpmyadmin - à l'affichage le caractere
se transforme en '?'

j'ai de plus testé en créant une table test, interclassement utf8-
unicode-ci
j'ai copié collé le c accent
et affiche toujours ? sur une page web quelque soit le charset de la
page je ne comprends pas ...
Thierry
2007-02-23 10:35:55 UTC
Permalink
Post by lolodev
La traduction polonaise m'a été donnée sous forme d'un doc pdf que
j'ai copie/colle depuis w2000 dans une base mysql installee
sur un serveur linux via phpmyadmin - à l'affichage le caractere
se transforme en '?'
moué... il peut s'en passer des choses dans le 'bloc note' de windows.

un truc affreux auquel je pense comme ça
1/- copie colle vers ms word
2/- force l'enregistrement en html
(je l'ai fait une fois pour du chinois... c'est trés agaçant, mais ça
marche.)
3/- récupère les entités &#....; pour batir un formulaire utf-8 ayant autant
de lignes
<input type=='text' name='labels[]' value='&#....;&#....;.....' />
que le label à enregistrer
4/- utilise ce formulaire dans un script pour mettre ta bdd à jour
(un peu de php quand même et en admettant que tu es connecté
à une bdd qui comporte une table labels...)

foreach ($labels as $label) {
$db->query("insert into labels values (\"$label\")");
}

voilà, c'est boeuf, mais sur le papier ça marche.
Olivier Miakinen
2007-02-23 12:32:13 UTC
Permalink
Post by lolodev
j'ai de plus testé en créant une table test, interclassement utf8-
unicode-ci
j'ai copié collé le c accent
et affiche toujours ? sur une page web quelque soit le charset de la
page je ne comprends pas ...
Eh bien la toute première chose à faire, avant de mettre le souk dans ta
base et dans tes programmes, c'est justement de *comprendre* ce qui se
passe. En matière de jeux de caractères, jouer à l'apprenti-sorcier en
appliquant des recettes au hasard n'est jamais une bonne idée : tu
risques de te retrouver avec un truc qui semble marcher mais qui peut
planter plus tard dans un cas que tu n'auras pas prévu.

Alors la première chose à savoir, c'est si le charset est bon *dans les
entêtes HTTP*. Quand tu t'en seras assuré tu pourras éventuellement
doubler cette info par une balise META *dans le code HTML* mais cela ne
doit venir qu'après, quand tu auras complètement résolu tes problèmes de
polonais.

Tu n'aurais pas une URL où l'on pourrait voir le résultat nous-mêmes ?
l***@unautresejour.fr
2007-02-23 14:03:51 UTC
Permalink
http://www.microkinesitherapie.fr/mk2/pages/fr/3.htm

puis remplcer /fr/ par /pl/ dans l'URL pour passer en polonais
en bas de page à droit de "mentions légales", y mon test: pol?

voilà
Thierry
2007-02-23 14:48:32 UTC
Permalink
alors au moins:

je ne trouve pas de charset dans le header http

tu as un
<meta http-equiv="Content-Type" content="text/html; charset=iso8859-1">
----------------------------------------------------------------^
qui traine dans le <head>

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

voilà
lolodev
2007-02-23 15:49:17 UTC
Permalink
Post by Thierry
je ne trouve pas de charset dans le header http
je reste bouche bé : comment celà se configure ? via un header php ?
Post by Thierry
tu as un
<meta http-equiv="Content-Type" content="text/html; charset=iso8859-1">
oui je faisais des essais
Post by Thierry
tes entités sont "mals" codées
Nowo&#347ci => Nowo&#347;ci
---------------------------------^
oui je corrige

merci
lolodev
2007-02-23 16:07:09 UTC
Permalink
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 :)
Thief13
2007-02-23 21:12:36 UTC
Permalink
Post by 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 :)
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...
lolodev
2007-02-26 12:31:13 UTC
Permalink
Post by Thief13
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 ?????
Olivier Miakinen
2007-02-26 16:11:30 UTC
Permalink
[ Attention, envoi en Windows CP1252 pour un caractère non Latin1 ]
Post by lolodev
header("Content-type: text/html; charset=utf-8");
$test = "é à è ü";
echo $test;
Donc tes caractères « français » proviennent tous directement du fichier
PHP...
Post by lolodev
echo "pol".$ln2[lib];
... tandis que le c accentué provient de la base de données.
Post by lolodev
é à è ü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 = "é ć è ü";
Olivier Miakinen
2007-02-23 21:12:36 UTC
Permalink
Post by 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 ...
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=base+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
Post by lolodev
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.
Thierry
2007-02-23 14:03:51 UTC
Permalink
Post by Olivier Miakinen
Alors la première chose à savoir, c'est si le charset est bon *dans les
entêtes HTTP*. Quand tu t'en seras assuré tu pourras éventuellement
doubler cette info par une balise META *dans le code HTML* mais cela ne
doit venir qu'après, quand tu auras complètement résolu tes problèmes de
polonais.
c'est pas faux. à ce sujet
http://www.fiddlertool.com/fiddler/
ou l'équivalent est ton ami.
Post by Olivier Miakinen
Tu n'aurais pas une URL où l'on pourrait voir le résultat nous-mêmes ?
oui, s'il te plaît.
Thief13
2007-02-23 06:43:45 UTC
Permalink
FCKEditor à une option qui permet de changer toutles caractère non latin
en entité comme ça. ça marche avec le polonais, le japonais, le
chinois, tout...
lolodev
2007-02-23 09:02:12 UTC
Permalink
Post by Thief13
FCKEditor à une option qui permet de changer toutles caractère non latin
en entité comme ça. ça marche avec le polonais, le japonais, le
chinois, tout...
oups ça m'interresse car j'utilise l editeur wysiwyg fck
où celà se configure ?
merci
Thief13
2007-02-23 21:12:36 UTC
Permalink
Post by lolodev
oups ça m'interresse car j'utilise l editeur wysiwyg fck
où celà se configure ?
merci
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
Continuer la lecture sur narkive:
Loading...