Bonsoir,

J'ai script php qui extrait des morceaux de textes, pouvant être de tout type d'encodage, pour ensuite les enregistrer sous forme de requêtes, dans un fichier texte.

Mon problème est que lorsque je transforme mes morceaux de textes en UTF-8, en utilisant la fonction utf8_encode, mon fichier final se trouve bien en UTF-8 sans bom (d'après notepad++), mais tous les caractères ne sont pas encodés correctement (en particulier le symbole euro mais d'autres aussi). En revanche, les caractères accentués sont correctement encodés.

Le code donne à peu près ceci :

Fichier à mettre en iso pour bien percevoir le problème...

<?php
// Connexion pour utiliser mysql_real_escape_string\\

$name = '€ mais pas sur é';
$name = mysql_real_escape_string(utf8_encode($name));
if($handle = fopen('toto.txt', 'a')) {
	$sql = "INSERT INTO test(name) VALUES('$name');";
	fwrite($handle, "\n".$sql);
	fclose($handle);
}

// Fin de connexion
?>

Même problème avec :
$name = mysql_real_escape_string(mb_convert_encoding($name,"UTF-8"));


Quelle est la bonne fonction à utiliser ou que faut-il faire ?

Je sais que utf8_encode prend uniquement ISO-8859-1 en entrée, alors que mon script est suceptible de récupérer n'importe quel type d'encodage.
Cependant, le problème évoqué a bien lieu sur de l'ISO-8859-1.
De ce fait, si votre solution prend en compte ma contrainte, j'en serais ravis et je vous offrirai...

Merci d'avance !
Modifié par Cybergifle (27 Aug 2007 - 13:21)
salut Heyoan,

Heyoan a écrit :

à tout hasard : tu as bien dans ton PHP ?
header('Content-type: text/html; charset=utf-8');

Non, sachant que mon php ne fait pas d'affichage mais juste de l'extraction pour enregistrer dans un fichier, cela n'est pas utile !?

Heyoan a écrit :

Sinon tu pourrais regarder du côté de mb-convert-encoding Smiley murf .

A+


Cybergifle a écrit :

Même problème avec :

$name = mysql_real_escape_string(mb_convert_encoding($name,"UTF-8"));

Cybergifle a écrit :
Je sais que utf8_encode prend uniquement ISO-8859-1 en entrée, alors que mon script est suceptible de récupérer n'importe quel type d'encodage.
Cependant, le problème évoqué a bien lieu sur de l'ISO-8859-1.

Le problème, c'est que le symbole de l'euro n'existe pas en iso-8859-1. Il existe par contre en iso-8859-15.
Effectivement...J'ai une vague idée de comment corriger alors.

Merci.
Modifié par Cybergifle (27 Aug 2007 - 13:20)