Bonjour !

Je ne sais pas si quelqu'un pourrait m'aider ; j'ai un problème qui me bloque depuis une semaine et je ne sais pas m'en sortir !

Bref, avec un script PHP5 j'importe le contenu d'un fichier XML en ISO 8859-1 dans une base de données MySQL - UTF8. À l'évidence il faut convertir de l'un à l'autre, et jusque-là j'ai trouvé deux possibilités :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$data[] = utf8_encode((string)$child);

... ou bien :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$data[] = convertToUtf8((string)$child);
 
function convertToUtf8($text) {
//  cURL('http://'.$url);
 
    preg_match('/<meta.*?charset=(|\")(.*?)("|\")/i', $html, $matches);
 
    $charset = $matches[2];
 
    if($charset)
        return mb_convert_encoding($text, 'UTF-8', $charset);
    else
        return $text;
}

En exécutant le script en l'appelant depuis Firefox, tout va bien : ou l'un ou l'autre convertit correctement les chaînes et quand je fais la recherche sur ma page web je vois bien les « é » (parmi d'autres).

OR... si j'essaie d'appeler le même script depuis le terminal Unix terminal SSH (cron job OU ligne de commande), au lieu d'« é » je vois « é ».

Avez-vous des idées ?? J'ai déjà essayé de mettre tous les mises en forme du serveur (LC_ALL, LANG, LANGUAGE, etc. en fr_FR.utf8) et ça ne marche pas.

Le pire, c'est que je vois les « é » correctement dans la console. Je ne sais pas s'il essaye de les garder en ASCII/ANSI ou quoi...

Votre aide serait bien appréciée ! Je commence à me douter de ce que je fais !