Convertion pour export, problème de caractères
Posté : 23 nov. 2012, 15:01
Bonjour,
Je rencontre un problème que je n'arrive pas à résoudre depuis 15 jours, lors de l'export des données et plus précisément lors de la conversion si j'ai bien compris.
Tout les reste du site internet fonctionne correctement, ajout de texte, lecture de texte, je ne rencontre ce problème que lors de l'export de données.
Le code fourni est celui du logiciel, je n'ai pas programmé ceci, de plus je suis plutôt novice.
Je suis en PHP Version 5.3.3
En en-tête il y a marqué UTF-8 de partout sur le code source
Base de données, voici le résultat de : SHOW VARIABLES LIKE "character%"
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
Je prend par exemple le "é"
Dans la base de données il y a des variables en HTML ("é") et des variables ("é")
Lors de l'export, je retrouve dans le fichier exporté en XML les variables en HTML ("é") sont bien transformées en " & # 2 3 3 ;" (j'ai mis des espaces pour que les informations soient lisibles), là pas de soucis, mais les variables "é" sont transformées en " & # 1 9 5 ; & # 1 6 9 ;" (j'ai mis des espaces pour que les informations soient lisibles)
Voici le code qui me semble faire défaut, je pense que ça vient de la fonction "get_html_translation_table"
Si quelqu'un peu m'en dire un peu plus SVP? ou une idée?
J'en peux plus, j'ai vraiment besoin d'aide s'il vous plait.
Si vous avez besoin d'information supplémentaires, n'hésitez pas à me les demander.
Cordialement
Je rencontre un problème que je n'arrive pas à résoudre depuis 15 jours, lors de l'export des données et plus précisément lors de la conversion si j'ai bien compris.
Tout les reste du site internet fonctionne correctement, ajout de texte, lecture de texte, je ne rencontre ce problème que lors de l'export de données.
Le code fourni est celui du logiciel, je n'ai pas programmé ceci, de plus je suis plutôt novice.
Je suis en PHP Version 5.3.3
En en-tête il y a marqué UTF-8 de partout sur le code source
Base de données, voici le résultat de : SHOW VARIABLES LIKE "character%"
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
Je prend par exemple le "é"
Dans la base de données il y a des variables en HTML ("é") et des variables ("é")
Lors de l'export, je retrouve dans le fichier exporté en XML les variables en HTML ("é") sont bien transformées en " & # 2 3 3 ;" (j'ai mis des espaces pour que les informations soient lisibles), là pas de soucis, mais les variables "é" sont transformées en " & # 1 9 5 ; & # 1 6 9 ;" (j'ai mis des espaces pour que les informations soient lisibles)
Voici le code qui me semble faire défaut, je pense que ça vient de la fonction "get_html_translation_table"
if( !function_exists('XMLentities_table') ) {
function XMLentities_table($type, $charset) {
static $trans = array();
if( empty($trans[$type][$charset]) ) {
foreach(get_html_translation_table(HTML_ENTITIES, $type) as $char => $entity)
$trans[$type][$charset][$char] = "&#".ord($char).';';
for($i=127; $i <= 256; $i++)
$trans[$type][$charset][chr($i)] = "&#$i;";
ksort($trans[$type][$charset]);
}
return $trans[$type][$charset];
}
function XMLentities($str, $entType=ENT_COMPAT, $charset="UTF-8" /*"ISO-8859-1"*/) {
static $trans = array();
if( empty($trans[$entType][$charset]) ) {
$trans[$entType][$charset] = XMLentities_table($entType, $charset);
}
$s = '';
// TB silence
foreach(preg_split('//', $str) as $c) {
if( isset($trans[$entType][$charset][$c]) )
$s .= $trans[$entType][$charset][$c];
else
$s .= $c;
}
return $s;
}
function XMLentities_decode($str, $entType=ENT_COMPAT, $charset="UTF-8" /*"ISO-8859-1"*/) {
static $decodeTrans = array();
if( empty($decodeTrans[$entType][$charset]) ) {
$decodeTrans[$entType][$charset] = array_flip(XMLentities_table($entType, $charset));
ksort($decodeTrans[$entType][$charset]);
}
$pattern = '/(&#\d+;)/';
$matches = array();
if( preg_match_all($pattern, $str, $matches) ) {
foreach($matches[1] as $idx => $entValue) {
if( isset($decodeTrans[$entType][$charset][$entValue]) ) {
$str = str_replace($matches[0][$idx], $decodeTrans[$entType][$charset][$entValue], $str);
}
}
}
return $str;
}
}
Si quelqu'un peu m'en dire un peu plus SVP? ou une idée?
J'en peux plus, j'ai vraiment besoin d'aide s'il vous plait.
Si vous avez besoin d'information supplémentaires, n'hésitez pas à me les demander.
Cordialement