Aller au contenu

Transformer les caractères spéciaux


loulou

Sujets conseillés

Rebonjour à tous,

J'ai un petit problème avec un fichier texte :

Les lignes sont constituées de champs sous cette forme :

"donnée1","donnée2","donnée3"

"donnéea","donnéeb","donnéec"

J'intègre des lignes dans ma base de données et ça fonctionne très bien.

Le soucis c'est que ces données comportent des caractères spéciaux que je veux convertir en caractères "normaux".

Exemple : le "&" est sous la forme &

Voici 2 lignes de mon fichier :

"000432" ,"Réseaux & Communications" ,"C" ,"Olitec" ,"12" ,"5605" ,"4060","Olitec USB RNIS V2 -  RNIS BRI - 128 Kbits/s"
"00112503" ,"Imprimantes" ,"C" ,"Oki Systèmes" ,"0" ,"29900" ,"20700","Serveur d'impression -  Fast Ethernet - 100 Mbits/s"

Voici ce que j'aimerai avoir :

"000432" ,"Réseaux & Communications" ,"C" ,"Olitec" ,"12" ,"5605" ,"4060","Olitec USB RNIS V2 -  RNIS BRI - 128 Kbits/s"
"00112503" ,"Imprimantes" ,"C" ,"Oki Systèmes" ,"0" ,"29900" ,"20700","Serveur d'impression -  Fast Ethernet - 100 Mbits/s"

J'ai essayé des choses comme "htmlspecialchars(donnee)", au moment d'insérer les données dans la base, mais ça ne fonctionne pas.

Une petite idée ?

Merci

Lien vers le commentaire
Partager sur d’autres sites

je crois qu'il y a erreur sur la fonction, toi c'est la fonction inverse qu'il te faut, html_entity_decode().

Description
string html_entity_decode ( string string [, int quote_style [, string charset]])


html_entity_decode() est la fonction contraire de htmlentities() : elle convertit les entités HTML de la chaîne string en caractères normaux.

Le paramètre optionnel quote_style vous permet de définir ce qu'il adviendra des guillemets simples et doubles. Ce paramètre prend l'une des valeurs suivantes (et la valeur par défaut est ENT_COMPAT) :

Tableau 1. Constantes disponibles pour quote_style

Constante Description
ENT_COMPAT Convertit les guillemets doubles et ignore les guillemets simples.
ENT_QUOTES Convertit les guillemets doubles et les guillemets simples.
ENT_NOQUOTES Convertit les guillemets simples et ignore les guillemets doubles.


Le jeu de caractères ISO-8859-1 est utilisé par défaut, comme paramètre charset. Ce paramètre permet de choisir le jeu de caractères utilisés dans la conversion.

Les jeux de caractères suivantes sont disponibles et supportés par PHP 4.3.0 et plus récent.

Tableau 2. Jeux de caractères supportés

Jeux de caractères Description
ISO-8859-1 Europe occidentale, Latin-1
ISO-8859-15 Europe occidentale, Latin-9. Dispose du signe Euro, des caractères spéciaux français et finlandais, qui manque au Latin-1(ISO-8859-1).
UTF-8 Unicode 8 bits multi octets, compatible avec l'ASCII
cp1252 Jeux de caractères spécifique de Windows pour l'Europe occidentale.
BIG5 Chinois traditionnel, principalement utilisé à Taiwan.
GB2312 Chinois simplifié, officiel.
BIG5-HKSCS Big5 avec les extensions de Hong Kong, chinois traditionnel.
Shift_JIS Japonais
EUCJP Japonais

Genmin

Modifié par genmin
Lien vers le commentaire
Partager sur d’autres sites

Je viens juste de m'apercevoir que une fois dans ma base, certains caractères n'ont pas la forme voulue :

exemple :

Réseaux & Communications au lieu de Réseaux & Communications, alors que dans le fichiers source, qui me sert à alimenter la base, j'ai bien Réseaux & Communications (gràce à la fonction html_entity_decode) que tu m'as recommandé. :blink:

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

ce problème vient du fait que tu as importé tes données depuis un fichier encodé au format "UTF-8" et que la destination (la table sur le serveur) est sûrement en "latin1" (ou autre collation). Tu peux remédier en ouvrant le ton fichier .sql (où se situent les données/sutructures en question) avec le notepad (sous Windows 2000/XP et en tous cas) et en faisant "Fichier/Enregister sous..." et en remplacçant "UTF-8" par "ANSI"...pui en l'enregistrant (soit ailleurs, soit en l'écrasant)

Suivant comment tu exportes tes données de la base source, tu peux spécifier un encodage pour le fichier de destination, ce qui t'éviterait de procéder comme ci-dessus pour les prochaines fois.

Bonne chance !

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Merci Therec pour ta réponse, je viens d'essayer. J'ai réenregistré le fichier en choisissant "ANSI". Ensuite je l'ai intégré dans ma base de données, et ça a parfaitement marché.

Tu dis :

"Suivant comment tu exportes tes données de la base source, tu peux spécifier un encodage pour le fichier de destination, ce qui t'éviterait de procéder comme ci-dessus pour les prochaines fois."

Comment fait on pour spécifier l'encodage ?

En fait, au départ, j'ai un fichier xml, mais je n'ai pas réussi à le traiter avec xsl pour créer un fichier txt.

Alors, via une succession de "ereg_replace", j'ai fabriqué une chaine que j'insère dans un fichier que je crée, et que je nomme "metro5.txt".

Y a t'il au moment ou je crée mon fichier metro5.txt, une possiblité pour moi de lui attribuer ANSI pour le codage ?

En tout cas merci pour m'avoir expliqué d'ou venait mon erreur. :)

Lien vers le commentaire
Partager sur d’autres sites

Avant toutes choses (entre autre, chercher un moyen d'importer tes données reformatée avec les ereg_replace), peux-tu mettre un exemple du contenu de ton fichier XML (ta source originale) ? Car si tu as un utilitaire de gestion de base de données comme phpMyAdmin et que ce fichier XML utilise une syntaxe similaire tu pourrais sans doute utiliser cela directement...

Lien vers le commentaire
Partager sur d’autres sites

Salut Therec et merci pour ton implication.

Voici un document tel que je le recevrai chaque jour (en beaucoup plus long, envirron 10000 items)

Ce qui m'a été demandé de faire,c'est de permettre à l'urilisateur final, (mon patron) de rentrer ces données dans la bdd de façon simple, car il n'est pas informaticien.

- <CATALOG>
- <ProductCatalog AccountNumber="xxxxxx">
- <PRODCATHDR>
 <Header catalogPurposeCode="FTP" SupersededCode="" VersionNumber="1.0" RevisionNumber="0" FTP="FTP" />
 <DocumentDate TypeDate="YYYY-MM-DDTHH:MM:SS.ms">2005-03-04T16:13:06.700</DocumentDate>
 <DefaultCurrency>EUR</DefaultCurrency>
 <DefaultLanguage>EN</DefaultLanguage>
 <ProductCount>111111</ProductCount>
- <SupplierParty>
 <Party AgencyId="xxx-xxxxxxx-france" PartyId="100">0</Party>
 </SupplierParty>
 </PRODCATHDR>
- <Item Sku="/1010FR" Category="Imprimantes" Type="C" Manufacturer="Kyocera" StockLevel="21" RRP="27500" CLI="25580">
 <Desc>IMPRIMANTE KYOCERA FS</Desc>
 </Item>
- <Item Sku="/FS1020D" Category="Imprimantes" Type="C" Manufacturer="Kyocera" StockLevel="7" RRP="31500" CLI="27870">
 <Desc>IMPRIMANTE KYOCERA</Desc>
 </Item>
 </ProductCatalog>
 </CATALOG>

Sinon, ce que tu m'as expliqué l'autre jour m'a bien aide, en enregistrant le fichier en ANSI, les données étaient très bien intégrées dans ma bdd.

:wub:

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...