Conversion / Reconnaissance caractère PHP
Jaime
-
varfendell Messages postés 3259 Date d'inscription Statut Membre Dernière intervention -
varfendell Messages postés 3259 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis actuellement en train de développer un programme en PHP permettant d'exporter des informations provenant d'une base MySQL, au format CSV.
Seulement, il y a quelques caractères que je n'arrive pas à traiter.
Pour une raison que j'ignore, certains caractères spéciaux tels que le "É" ou "ç" sont affichés en respectivement "à0/00" ou "à§".
Etant donné que je reçois les données directement sous cette forme et que je n'ai pas les possibilités pour influer sur la source, mon idée fut de remplacer ces anomalies par leur caractère respectif via un "str_replace" (en définissant donc les correspondances une à une).
Seulement problème, le "str_replace" ne me les reconnait pas. Impossible donc via le code de faire mes replace du "à0/00" en "É" ou du "à§" en "ç".
Pour l'ensemble des autres chaines, pas de soucis en revanche. Si je fais un remplacer manuel via PSPad, aucun problème non plus.
Quelqu'un aurait-il une idée au sujet de ce problème ?
Merci d'avance pour votre aide.
je suis actuellement en train de développer un programme en PHP permettant d'exporter des informations provenant d'une base MySQL, au format CSV.
Seulement, il y a quelques caractères que je n'arrive pas à traiter.
Pour une raison que j'ignore, certains caractères spéciaux tels que le "É" ou "ç" sont affichés en respectivement "à0/00" ou "à§".
Etant donné que je reçois les données directement sous cette forme et que je n'ai pas les possibilités pour influer sur la source, mon idée fut de remplacer ces anomalies par leur caractère respectif via un "str_replace" (en définissant donc les correspondances une à une).
Seulement problème, le "str_replace" ne me les reconnait pas. Impossible donc via le code de faire mes replace du "à0/00" en "É" ou du "à§" en "ç".
Pour l'ensemble des autres chaines, pas de soucis en revanche. Si je fais un remplacer manuel via PSPad, aucun problème non plus.
Quelqu'un aurait-il une idée au sujet de ce problème ?
Merci d'avance pour votre aide.
6 réponses
-
Bonjour,
j'ai peut être une solution, mais cela ne devrait marcher qu'avec des caractères spéciaux...donc s'il considère $ ou / comme un caractère spécial, cela devrait marcher:
exemple de solution:
$exemple = "as\cfrh";
$exemple = str_replace("\","",$exemple );
devrait normallement donner
$exemple = "ascfrh";mais il n'en est rien. En effet, tu doit declarer ton caractere spécial:
$exemple = str_replace("\\","",$exemple );
donnera le resultat attendu precedemment/
En gros mettre un '\' devant le caractère spécial pour qu'il soit pris en compte.
Dans ton cas peut etre que :
$exemple = str_replace("à\§","ç",$exemple );
marchera
-
-
quand tu fais un echo de ta variable avant et apres, cela te donne quoi?
-
Entre les 2, la variable ne subit aucun changement.
On dirait vraiment qu'il n'y a pas de détection par le replace, étrange... -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Voici :
$fp = fopen("feedProducts.txt", "r");
$current_line = fgets($fp);
while (!feof($fp)) {
$current_line = fgets($fp);
echo $current_line; //RESULTAT : "conà§u"
$current_line= str_replace("à§","ç",$current_line);
echo $current_line; //RESULTAT : "conà§u"
fwrite($fp,$current_line);
}
Si en revanche avec le même code, je fais un replace sur un autre mot, pas de problème. -
C'est pas plutôt É => Ã0/00 et ç => ç ?
Si c'est le cas essaye de passer ta chaine de caractère par un petit utf8-decode https://www.php.net/manual/fr/function.utf8-decode.php.