Discussion:
Correction des apostrophes
(trop ancien pour répondre)
Denis Beauregard
2009-05-07 06:59:25 UTC
Permalink
Bonjour,

Quelqu'un a saisi un certain texte dans un fichier word, puis recopier
ces lignes dans une base mySQL. word a le défaut de transformer les
apostrophes en un caractère reconnu par word seulement.

Y a-t-il une méthode simple pour corriger ces apostrophes ?

Présentement, j'ai un htmlentities qui transforme les accents en
entités (la base mySQL est en latin-1 et tout le texte de la page
html que j'ai transformée en PHP est en UTF8). Y a-t-il une
fonction similaire pour les apostrophes ? Je suis certain que celui
qui saisit ce texte va introduire d'autres apostrophes et je pense
qu'il est plus simple de corriger au moment de l'affichage.


Denis
CrazyCat
2009-05-07 15:18:55 UTC
Permalink
Post by Denis Beauregard
Bonjour,
Quelqu'un a saisi un certain texte dans un fichier word, puis recopier
ces lignes dans une base mySQL. word a le défaut de transformer les
apostrophes en un caractère reconnu par word seulement.
Y a-t-il une méthode simple pour corriger ces apostrophes ?
J'utilise (avec plus ou moins de bon résultats) le système suivant:

<?php
$cp1252_map = array(
"\xc2\x80" => "\xe2\x82\xac", /* EURO SIGN */
"\xc2\x82" => "\xe2\x80\x9a", /* SINGLE LOW-9 QUOTATION MARK */
"\xc2\x83" => "\xc6\x92", /* LATIN SMALL LETTER F WITH HOOK */
"\xc2\x84" => "\xe2\x80\x9e", /* DOUBLE LOW-9 QUOTATION MARK */
"\xc2\x85" => "\xe2\x80\xa6", /* HORIZONTAL ELLIPSIS */
"\xc2\x86" => "\xe2\x80\xa0", /* DAGGER */
"\xc2\x87" => "\xe2\x80\xa1", /* DOUBLE DAGGER */
"\xc2\x88" => "\xcb\x86", /* MODIFIER LETTER CIRCUMFLEX ACCENT */
"\xc2\x89" => "\xe2\x80\xb0", /* PER MILLE SIGN */
"\xc2\x8a" => "\xc5\xa0", /* LATIN CAPITAL LETTER S WITH CARON */
"\xc2\x8b" => "\xe2\x80\xb9", /* SINGLE LEFT-POINTING ANGLE QUOTATION */
"\xc2\x8c" => "\xc5\x92", /* LATIN CAPITAL LIGATURE OE */
"\xc2\x8e" => "\xc5\xbd", /* LATIN CAPITAL LETTER Z WITH CARON */
"\xc2\x91" => "\xe2\x80\x98", /* LEFT SINGLE QUOTATION MARK */
"\xc2\x92" => "\xe2\x80\x99", /* RIGHT SINGLE QUOTATION MARK */
"\xc2\x93" => "\xe2\x80\x9c", /* LEFT DOUBLE QUOTATION MARK */
"\xc2\x94" => "\xe2\x80\x9d", /* RIGHT DOUBLE QUOTATION MARK */
"\xc2\x95" => "\xe2\x80\xa2", /* BULLET */
"\xc2\x96" => "\xe2\x80\x93", /* EN DASH */
"\xc2\x97" => "\xe2\x80\x94", /* EM DASH */
"\xc2\x98" => "\xcb\x9c", /* SMALL TILDE */
"\xc2\x99" => "\xe2\x84\xa2", /* TRADE MARK SIGN */
"\xc2\x9a" => "\xc5\xa1", /* LATIN SMALL LETTER S WITH CARON */
"\xc2\x9b" => "\xe2\x80\xba", /* SINGLE RIGHT-POINTING ANGLE QUOTATION*/
"\xc2\x9c" => "\xc5\x93", /* LATIN SMALL LIGATURE OE */
"\xc2\x9e" => "\xc5\xbe", /* LATIN SMALL LETTER Z WITH CARON */
"\xc2\x9f" => "\xc5\xb8" /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/
);

/**
* Transforme une chaine cp1252 en utf8
* @param string $string Chaine à décoder
* @return string
*/
function cp1252_to_utf8($string) {
global $cp1252_map;
return strtr($str, $cp1252_map);
}

/**
* Décode une chaine Word déjà encodée en utf8
* @param string Chaine à décoder
* @return string
*/
function cp1252_utf8_to_iso($str) { // the other way around...
global $cp1252_map;
return utf8_decode(strtr($str, array_flip($cp1252_map)));
}
?>

Il faut tester l'une ou l'autre des fonctions, selon l'encodage des données.
--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces : http://www.g33k-zone.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
Olivier Miakinen
2009-05-07 16:17:23 UTC
Permalink
Post by CrazyCat
<?php
$cp1252_map = array(
"\xc2\x80" => "\xe2\x82\xac", /* EURO SIGN */
[...]
"\xc2\x94" => "\xe2\x80\x9d", /* RIGHT DOUBLE QUOTATION MARK */
[...]
"\xc2\x9f" => "\xc5\xb8" /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/
);
Ah oui, pas bête. Là on remplace le caractère erroné *après* traduction
en UTF-8.
Denis Beauregard
2009-05-07 16:17:23 UTC
Permalink
Post by Denis Beauregard
Bonjour,
Quelqu'un a saisi un certain texte dans un fichier word, puis recopier
ces lignes dans une base mySQL. word a le défaut de transformer les
apostrophes en un caractère reconnu par word seulement.
Y a-t-il une méthode simple pour corriger ces apostrophes ?
Merci de l'idée. Je conserve en mémoire au cas où cela devient
nécessaire (avec un peu de chance, le saisisseur n'a pas utilisé
d'autres caractères non latin-1).


Denis
Mickael Wolff
2009-05-08 09:35:48 UTC
Permalink
Post by CrazyCat
Il faut tester l'une ou l'autre des fonctions, selon l'encodage des données.
iconv devrait faire le boulot, non ?
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Olivier Miakinen
2009-05-07 15:18:55 UTC
Permalink
Post by Denis Beauregard
Quelqu'un a saisi un certain texte dans un fichier word, puis recopier
ces lignes dans une base mySQL. word a le défaut de transformer les
apostrophes en un caractère reconnu par word seulement.
Ce caractère est reconnu par d'autres logiciels que Word, même si c'est
dans un jeu de caractères propriétaire (CP1252 de Microsoft) :
<http://www.miakinen.net/vrac/charsets/?or=4&pr=146>.
Post by Denis Beauregard
Y a-t-il une méthode simple pour corriger ces apostrophes ?
Présentement, j'ai un htmlentities qui transforme les accents en
entités (la base mySQL est en latin-1 et tout le texte de la page
html que j'ai transformée en PHP est en UTF8). Y a-t-il une
fonction similaire pour les apostrophes ?
Si je comprends bien, l'apostrophe cp1252 est déjà stockée dans la base
censée contenir de l'ISO-Latin1, et tu as configuré ton accès à cette
base de telle sorte que les caractères soient transformés en UTF-8 à la
lecture. C'est bien cela ?

Si oui, et si ta base mySQL l'autorise, alors le plus simple serait de
déclarer qu'elle contient du cp1252 plutôt que du latin1. Au passage, ça
te permettrait de gérer aussi les caractères « € », « œ », et ainsi de
suite (caractères des lignes 80 et 90 de la page citée plus haut).

Mais si l'accès à la base te retourne du latin1 et que tu le transformes
toi-même en UTF-8 par utf8_encode(), alors soit tu remplaces l'appel à
utf8_encode par un appel à iconv("CP1252", "UTF-8", ...), soit tu fais
d'abord un preg_replace("/\x92/", "&rsquo;", ...) avant de convertir.

Si tu as besoin d'explications complémentaires, commence par en dire
plus sur le contexte : où est le caractère quand tu dois le traiter,
quels sont les paramètres d'accès à MySQL, quel est le charset de
sauvegarde de ton code PHP, etc.

Cordialement,
--
Olivier Miakinen
Denis Beauregard
2009-05-07 16:17:23 UTC
Permalink
Post by Olivier Miakinen
Post by Denis Beauregard
Quelqu'un a saisi un certain texte dans un fichier word, puis recopier
ces lignes dans une base mySQL. word a le défaut de transformer les
apostrophes en un caractère reconnu par word seulement.
Ce caractère est reconnu par d'autres logiciels que Word, même si c'est
<http://www.miakinen.net/vrac/charsets/?or=4&pr=146>.
Le plus bête, c'est qu'avec mon PC avec Win 98, cela ne se rend pas
l'écran (il ne reste que des "?").
Post by Olivier Miakinen
Post by Denis Beauregard
Y a-t-il une méthode simple pour corriger ces apostrophes ?
Présentement, j'ai un htmlentities qui transforme les accents en
entités (la base mySQL est en latin-1 et tout le texte de la page
html que j'ai transformée en PHP est en UTF8). Y a-t-il une
fonction similaire pour les apostrophes ?
Si je comprends bien, l'apostrophe cp1252 est déjà stockée dans la base
censée contenir de l'ISO-Latin1, et tu as configuré ton accès à cette
base de telle sorte que les caractères soient transformés en UTF-8 à la
lecture. C'est bien cela ?
Non, c'est transformé en entités, ce qui revient au même
é -> &eacute; par exemple
Post by Olivier Miakinen
Si oui, et si ta base mySQL l'autorise, alors le plus simple serait de
déclarer qu'elle contient du cp1252 plutôt que du latin1. Au passage, ça
te permettrait de gérer aussi les caractères « € », « œ », et ainsi de
suite (caractères des lignes 80 et 90 de la page citée plus haut).
Je ne vois pas comment faire, donc je suppose que ce n'est pas permis.
En fait, je n'ai pas vu comment définir le jeu de caractères des
tables sur ce serveur (phpmyadmin 2.11.1.2) alors que sur un autre
serveur (phpmyadmin 2.11.9.4) c'est visible.
Post by Olivier Miakinen
Mais si l'accès à la base te retourne du latin1 et que tu le transformes
toi-même en UTF-8 par utf8_encode(), alors soit tu remplaces l'appel à
utf8_encode par un appel à iconv("CP1252", "UTF-8", ...), soit tu fais
d'abord un preg_replace("/\x92/", "&rsquo;", ...) avant de convertir.
le replace me semble plus simple en l'occurence. En tous cas, je
viens d'essayer et cela donne le résultat désiré ! Merci !

Mon problème était que j'ignorais le code de l'apostrophe et quand
je manipule, j'avais peur de changer ce code en autre chose (j'écris
le code PHP avec un éditeur DOS...)é
Post by Olivier Miakinen
Si tu as besoin d'explications complémentaires, commence par en dire
plus sur le contexte : où est le caractère quand tu dois le traiter,
quels sont les paramètres d'accès à MySQL, quel est le charset de
sauvegarde de ton code PHP, etc.
Le problème en soi est résolu, mais pour compléter, si je peux dire:

- données originales dans un fichier Word en cp1252 et pas moyen de
changer (celui qui fait la saisie ne sait pas comment s'y prendre
et ne pose pas de question pour qu'on lui explique)
- base mysql en latin1 et pas moyen de changer
- code en PHP écrit d'abord avec un éditeur DOS et des entités, puis
modifié en fonction d'un exemple (fait par une 3e personne) fait en
UTF8.

Moi je dois tout intégrer...


Denis
Denis Beauregard
2009-05-08 09:35:48 UTC
Permalink
Post by Olivier Miakinen
Mais si l'accès à la base te retourne du latin1 et que tu le transformes
toi-même en UTF-8 par utf8_encode(), alors soit tu remplaces l'appel à
utf8_encode par un appel à iconv("CP1252", "UTF-8", ...), soit tu fais
d'abord un preg_replace("/\x92/", "&rsquo;", ...) avant de convertir.
le preg_replace ne fonctionne pas.

Mon code, en gros

$l = mysql_fetch_array ($res);
$s = $ligne["champ"];
preg_replace("/\x92/", "&rsquo;ZZZZZZ", $s);
echo $s;


J'ai ajouté le ZZZZZZ pour bien voir si cela fait quelque chose et
je ne vois rien.

Pourtant, si j'édite le champ avec phpmyadmin, l'apostrophe est bien
visible, donc elle est bien dans la base de données. C'est comme si
quelque chose remplaçait l'apostrophe cp1252 par un ? avant que je
puisse la changer à mon tour.

Je croyais que cela fonctionnait mais en fait, j'avais tellement
remplacé d'apostrophes à la main que ce que je regardais n'avait
pas cette apostrophe.


Denis
Olivier Miakinen
2009-05-08 15:49:48 UTC
Permalink
Post by Denis Beauregard
le preg_replace ne fonctionne pas.
Mon code, en gros
$l = mysql_fetch_array ($res);
$s = $ligne["champ"];
preg_replace("/\x92/", "&rsquo;ZZZZZZ", $s);
echo $s;
J'ai ajouté le ZZZZZZ pour bien voir si cela fait quelque chose et
je ne vois rien.
Ça marcherait probablement mieux si tu mettais le résultat du
preg_replace dans $s. ;-)

$s = preg_replace("/\x92/", "&rsquo;ZZZZZZ", $s);

Au fait, dans ce cas simple str_replace devrait suffire :

$s = str_replace("\x92", "&rsquo;ZZZZZZ", $s);

Et si jamais ça ne marchais toujours pas, affiche donc bin2hex($s) pour
qu'on sache exactement ce qu'il contient.

Si 92 : c'est une apostrophe cp1252
Si E28099 : c'est une apostrophe UTF-8
Si C292 : c'était une apostrophe cp1252, traduite en UTF-8 comme s'il
s'agissait d'un code de commande Latin1
Denis Beauregard
2009-05-08 15:49:48 UTC
Permalink
Le 08 May 2009 09:35:48 GMT, Denis Beauregard
Post by Denis Beauregard
Post by Olivier Miakinen
Mais si l'accès à la base te retourne du latin1 et que tu le transformes
toi-même en UTF-8 par utf8_encode(), alors soit tu remplaces l'appel à
utf8_encode par un appel à iconv("CP1252", "UTF-8", ...), soit tu fais
d'abord un preg_replace("/\x92/", "&rsquo;", ...) avant de convertir.
le preg_replace ne fonctionne pas.
honte sur moi !!!!!!!

J'ai écrit

preg_replace("/\x92/", "&rsquo;", $s);

au lieu de

$s=preg_replace("/\x92/", "&rsquo;", $s);


Denis
Bernard
2009-05-09 11:11:29 UTC
Permalink
Bonjour,
Post by Olivier Miakinen
Post by Denis Beauregard
Quelqu'un a saisi un certain texte dans un fichier word, puis recopier
ces lignes dans une base mySQL. word a le défaut de transformer les
apostrophes en un caractère reconnu par word seulement.
J'ai le même problème avec un copier/coller de Word ou Open Office dans un
champ de saisie
Post by Olivier Miakinen
Ce caractère est reconnu par d'autres logiciels que Word, même si c'est
http://www.miakinen.net/vrac/charsets/?or=4&pr=146.
Cette page est superbe !
Post by Olivier Miakinen
Post by Denis Beauregard
Y a-t-il une méthode simple pour corriger ces apostrophes ?
Présentement, j'ai un htmlentities qui transforme les accents en
entités (la base mySQL est en latin-1 et tout le texte de la page
html que j'ai transformée en PHP est en UTF8). Y a-t-il une
fonction similaire pour les apostrophes ?
Je m'aperçois au fil de cette discussion que je dois avoir tout faux depuis
des années !!!
Mes méthodes de programmation ont été acquise il y a 40 ans et celles
d'internet il y a12 ans.
Il va donc falloir que je reprenne tous mes basiques à zéro,
en effet depuis que je programme en php/mySQL j'ai fait moyennement
attention
à toutes ces questions et j'ai paramétré mySQL au petit bonheur-la-chance
en tâtonnant pour voir quel était le meilleur résultat sur les apostrophes,
les euros,
le oe ae liés, etc.
Mes paramètres interclassement sont en général "latin_1_swedish_ci " chez
OVH
ou "latin_general_ci " chez online.
Ces hébergeurs n'ont pas l'option cp1252.

Mes prgramme php déclarent ceci :
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1">

Je me débrouille pour mettre des entités unicode quand il y a une
difficulté,
par exemple un unicode oe ou euro qui devient ? qaund on charge la base.

Mais je viens aussi de m'apercevoir que les requêtes de recherches par
mot-clés
ignoraient tous les caractères codés en unicode.

J'y perds mon latin (que je n'ai jamais appris!).

Y aurait-il des livres ou des sites où je pourrais, sans trop d'aspirine,
reprendre
tout cela à zéro ?

Merci beaucoup et bien cordialement,

Bernard
Post by Olivier Miakinen
Si je comprends bien, l'apostrophe cp1252 est déjà stockée dans la base
censée contenir de l'ISO-Latin1, et tu as configuré ton accès à cette
base de telle sorte que les caractères soient transformés en UTF-8 à la
lecture. C'est bien cela ?
Si oui, et si ta base mySQL l'autorise, alors le plus simple serait de
déclarer qu'elle contient du cp1252 plutôt que du latin1. Au passage, ça
te permettrait de gérer aussi les caractères « € », « œ », et ainsi de
suite (caractères des lignes 80 et 90 de la page citée plus haut).
Mais si l'accès à la base te retourne du latin1 et que tu le transformes
toi-même en UTF-8 par utf8_encode(), alors soit tu remplaces l'appel à
utf8_encode par un appel à iconv("CP1252", "UTF-8", ...), soit tu fais
d'abord un preg_replace("/\x92/", "&rsquo;", ...) avant de convertir.
Si tu as besoin d'explications complémentaires, commence par en dire
plus sur le contexte : où est le caractère quand tu dois le traiter,
quels sont les paramètres d'accès à MySQL, quel est le charset de
sauvegarde de ton code PHP, etc.
Cordialement,
--
Olivier Miakinen
Pascal
2009-05-10 09:00:04 UTC
Permalink
Le 09 May 2009 11:11:29 GMT,
Post by Denis Beauregard
Bonjour,
Post by Olivier Miakinen
Post by Denis Beauregard
Quelqu'un a saisi un certain texte dans un fichier word, puis
recopier ces lignes dans une base mySQL. word a le défaut de
transformer les apostrophes en un caractère reconnu par word
seulement.
J'ai le même problème avec un copier/coller de Word ou Open Office
dans un champ de saisie
Post by Olivier Miakinen
Ce caractère est reconnu par d'autres logiciels que Word, même si
http://www.miakinen.net/vrac/charsets/?or=4&pr=146.
Cette page est superbe !
J'ai cherché cette page un long moment un jour sans jamais la
trouver... :(

Je vais essayer de mettre l'adresse dans un coin.
Post by Denis Beauregard
Post by Olivier Miakinen
Post by Denis Beauregard
Y a-t-il une méthode simple pour corriger ces apostrophes ?
Présentement, j'ai un htmlentities qui transforme les accents en
entités (la base mySQL est en latin-1 et tout le texte de la page
html que j'ai transformée en PHP est en UTF8). Y a-t-il une
fonction similaire pour les apostrophes ?
Je m'aperçois au fil de cette discussion que je dois avoir tout faux
depuis des années !!!
Mes méthodes de programmation ont été acquise il y a 40 ans et celles
d'internet il y a12 ans.
Il va donc falloir que je reprenne tous mes basiques à zéro,
en effet depuis que je programme en php/mySQL j'ai fait moyennement
attention
à toutes ces questions et j'ai paramétré mySQL au petit
bonheur-la-chance en tâtonnant pour voir quel était le meilleur
résultat sur les apostrophes, les euros,
le oe ae liés, etc.
Mes paramètres interclassement sont en général "latin_1_swedish_ci "
chez OVH
ou "latin_general_ci " chez online.
ça, ç'est le stockage (je crois). Mais le client peut très bien discuter
avec la bd en utf8.

Entre le charset du serveur, de la base, de la table, du client, on s'y
perd...

La liste est la:
SHOW VARIABLES LIKE "%character_set%";

C'est expliqué la:
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

Je lance toujours juste après la connexion à la base:
SET NAMES 'charset_name'
SET CHARACTER SET charset_name

Je crois que ça suffit ? Mais j'avoue que j'en suis pas sur.

Pour compliquer le tout, il y a l'interclassement qui joue entre autre
sur le tri.
Post by Denis Beauregard
<meta http-equiv="content-Type" content="text/html;
charset=iso-8859-1">
Le doubler avec l'envoie d'une entête http adequat.

Pascal
Bernard
2009-05-10 18:09:32 UTC
Permalink
Bonjour,

Merci Pascal,
Post by Pascal
Entre le charset du serveur, de la base, de la table, du client, on s'y
perd...
SHOW VARIABLES LIKE "%character_set%";
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
J'avais vu sa petite soeur française
http://dev.mysql.com/doc/refman/5.0/fr/charset-connection.html
mais j'ai mal compris ce qu'est la "collation" ...
et, sauf si j'ai mal lu, je n'y ai pas trouvé comment faire une requête de
recherche avec des mots-clés accentués du type LIKE '%mon mot accentué%'
car au départ dans le champ de saisie-client il y a "mon mot accentué"
et dans la base du serveur
soit "mon mot accentué"
soit "mon mot accentu&acute;"
soit même parfois "mon mot accentu?"

Je vais me remettre sur l'ouvrage en essayant
SET NAMES 'charset_name' et SET CHARACTER SET charset_name

:->(
Post by Pascal
SET NAMES 'charset_name'
SET CHARACTER SET charset_name
Je crois que ça suffit ? Mais j'avoue que j'en suis pas sur.
Pour compliquer le tout, il y a l'interclassement qui joue entre autre
sur le tri.
Post by Bernard
<meta http-equiv="content-Type" content="text/html;
charset=iso-8859-1">
Le doubler avec l'envoie d'une entête http adequat.
J'ai ça en entête:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">

Bernard
Pascal
2009-05-10 19:11:52 UTC
Permalink
Le 10 May 2009 18:09:32 GMT,
Post by Bernard
J'avais vu sa petite soeur française
http://dev.mysql.com/doc/refman/5.0/fr/charset-connection.html
mais j'ai mal compris ce qu'est la "collation" ...
et, sauf si j'ai mal lu, je n'y ai pas trouvé comment faire une
requête de recherche avec des mots-clés accentués du type LIKE '%mon
mot accentué%' car au départ dans le champ de saisie-client il y a
"mon mot accentué" et dans la base du serveur
soit "mon mot accentué"
soit "mon mot accentu&acute;"
soit même parfois "mon mot accentu?"
mettre des entités html dans une base, je suis pas trop pour. L'html
n'est pas la seule finalité possible. Et dans le cas d'entité html, il
faut bien penser à l'appliquer également à la chaine recherchée.

Si il y a &eacute; é et ? à la fois, la base est sérieusement amochée :/
Sans données cohérentes, pas possible de chercher ou de faire quoi que
se soit d'ailleurs.

Avec un charset homogène de bout en bout, ça pose pas de soucis.
Post by Bernard
Je vais me remettre sur l'ouvrage en essayant
SET NAMES 'charset_name' et SET CHARACTER SET charset_name
phpyadmin peut aider. sur la page d'accueil, le charset du serveur est
indiqué.

Sur le mien : MySQL charset: UTF-8 Unicode (utf8)
Mes pages phpmyadmin sont envoyé en utf8. donc si je vois un caractères
bizarre d'une table utf8, j'ai un soucis.

Dans l'onglet variables, on voit aussi les different charsets avec les
valeurs actuelles et les valeurs par défaut.
Post by Bernard
Post by Pascal
Post by Bernard
<meta http-equiv="content-Type" content="text/html;
charset=iso-8859-1">
Le doubler avec l'envoie d'une entête http adequat.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
Je parlais de l'entête http.
<?php
header('Content-Type: text/html; charset=ISO-8859-1');

Avec firefox l'entête http est prioritaire sur tout le reste.

Le client envoie les données des formulaire avec le charset de la page.
si le client détecte le mauvais charset, ça coince.

Pascal
Bernard
2009-05-11 19:46:20 UTC
Permalink
Bonjour,
Post by Pascal
Sur le mien : MySQL charset: UTF-8 Unicode (utf8)
Mes pages phpmyadmin sont envoyé en utf8. donc si je vois un caractères
bizarre d'une table utf8, j'ai un soucis.
moi j'ai : interclassement : utf8_general_ci c'est la même chose ?
Post by Pascal
Post by Bernard
Post by Pascal
Post by Bernard
<meta http-equiv="content-Type" content="text/html;
charset=iso-8859-1">
Le doubler avec l'envoie d'une entête http adequat.
c'est à dire ?
Post by Pascal
Post by Bernard
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
Je parlais de l'entête http.
<?php
header('Content-Type: text/html; charset=ISO-8859-1');
Avec firefox l'entête http est prioritaire sur tout le reste.
Le pensais que le header php ISO-8859-1 était équivalent au meta html
iso-8859-1, je me trompe ?
Post by Pascal
Le client envoie les données des formulaire avec le charset de la page.
si le client détecte le mauvais charset, ça coince.
Je commence à comprendre la où ça coince

Bon, j'ai encore du boulot !

merci encore

Bernard
Olivier Miakinen
2009-05-11 21:33:38 UTC
Permalink
Post by Bernard
Post by Pascal
Je parlais de l'entête http.
<?php
header('Content-Type: text/html; charset=ISO-8859-1');
Avec firefox l'entête http est prioritaire sur tout le reste.
Pas seulement avec Firefox : c'est dans la norme, et tous les naviga-
teurs la respectent. Du moins, tous respectent le fait que l'entête HTTP
est prioritaire sur la balise META.
Post by Bernard
Le pensais que le header php ISO-8859-1 était équivalent au meta html
iso-8859-1, je me trompe ?
Oui et non. S'il n'y a pas de charset dans l'entête Content-Type HTTP,
c'est en effet le META qui est pris en compte. Dans le cas contraire, le
META est ignoré.
Post by Bernard
Post by Pascal
Le client envoie les données des formulaire avec le charset de la page.
si le client détecte le mauvais charset, ça coince.
Je commence à comprendre la où ça coince
Bon, j'ai encore du boulot !
Si jamais tu ne l'as jamais vu, ceci est très intéressant :
http://french.joelonsoftware.com/Articles/Unicode.html
Bernard
2009-05-16 10:26:51 UTC
Permalink
Post by Olivier Miakinen
http://french.joelonsoftware.com/Articles/Unicode.html
Non, pas vu, merci, j'y vais

Bernard

Loading...