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.
A voir également:
- Conversion / Reconnaissance caractère PHP
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Reconnaissance musique en ligne sans télécharger - Guide
- Caractere vide - Guide
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
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
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...
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.
$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.
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.