Discussion:
Retirer tous les caracteres windows
(trop ancien pour répondre)
WebShaker
2010-05-27 21:36:25 UTC
Permalink
Salut.

Je cherche une fonction pour supprimer tous les caractères spécifiques
windows.

Je génère des PDF à base de fichiers fournis par des clients.
Or ceux-ci m'envoient parfois des fichiers contenant des caractères
windows (ou word je ne sais pas).
Bref. À tous les coups ça plante la lib pdf...

Comment puis-je tous les virer ?
Ne conserver que les caractères ISO.

merci
Étienne.
Olivier Miakinen
2010-05-27 22:06:33 UTC
Permalink
Bonjour,
Post by WebShaker
Je cherche une fonction pour supprimer tous les caractères spécifiques
windows.
C'est quoi c'te bête ???
Post by WebShaker
Je génère des PDF à base de fichiers fournis par des clients.
Or ceux-ci m'envoient parfois des fichiers contenant des caractères
windows (ou word je ne sais pas).
Ben écoute, si tu ne sais pas ce que tu veux enlever, et que tu ne nous
donnes pas de moyen pour le savoir à ta place (par exemple en publiant un
exemple de fichier et en décrivant ce qui te gêne), je ne vois pas bien
comment on pourrait t'aider efficacement.

Note que ma boule de cristal me susurre que peut-être tu reçois un
fichier écrit avec un charset CP1252 alors que tu t'attends à un charset
ISO-8859-1. Cela dit, cela pourrait aussi bien être du CP850 ou même de
l'ISO-8859-15, voire de l'UTF-8, et le charset d'arrivée est peut-être
censé être autre chose encore.

Quoi qu'il en soit, si c'est un problème de jeu de caractères, merci de
lire <http://french.joelonsoftware.com/Articles/Unicode.html> afin de
pouvoir ensuite décrire ce problème de façon correcte.

Maintenant, il est aussi possible puisque tu mentionnes Word qu'il
s'agisse d'instructions de formatage... mais mon petit doigt me dit que
c'est ma première idée qui est la bonne.
Post by WebShaker
Bref. À tous les coups ça plante la lib pdf...
Une fois lu <http://french.joelonsoftware.com/Articles/Unicode.html>, si
ton problème est vraiment d'un jeu de caractères (charset), peut-être
trouveras-tu dans ta lib pdf un paramètre permettant de préciser ce
charset, et donc de ne perdre aucune info.
Post by WebShaker
Comment puis-je tous les virer ?
Eh bien selon le cas cela pourra être par preg_replace(), par
str_replace(), par iconv(), à moins bien sûr que la solution la
meilleure consiste à les garder mais les déclarer correctement.
Post by WebShaker
Ne conserver que les caractères ISO.
ISO-quoi ? ISO-8859-6 (jeu de caractères arabes) ? ISO 9000 ?

Cf. <http://alis.isoc.org/codage/iso8859/8859-6.htm> et
<http://fr.wikipedia.org/wiki/S%C3%A9rie_des_normes_ISO_9000>.


Cordialement,
--
Olivier Miakinen
Denis Beauregard
2010-05-28 09:06:49 UTC
Permalink
Post by WebShaker
Salut.
Je cherche une fonction pour supprimer tous les caractères spécifiques
windows.
Je génère des PDF à base de fichiers fournis par des clients.
Or ceux-ci m'envoient parfois des fichiers contenant des caractères
windows (ou word je ne sais pas).
Bref. À tous les coups ça plante la lib pdf...
Comment puis-je tous les virer ?
Ne conserver que les caractères ISO.
J'ai eu un problème de ce genre récemment.

Le client me fournissait les données dans un fichier Excel de
plusieurs Mo. Je l'enregistrais en texte tabulé et je le lisais
avec Easy PHP et PHPmyadmin.

Les caractères posant problème étaient lus correctement et bien
affichés chez moi (j'ai Seamonkey 1.1.7).

Il s'agit de : l'apostrophe de Word ’/', le …/..., le �"/oe et
l'apostrophe inverse ‘/'. Tous les autres caractères passaient
bien (mais mon client pourrait éventuellement utiliser d'autres
caractères).

Puis, j'exportais les données en format gzippé.

J'ai ouvert le fichier gzippé et tout était encodé en format UTF8
et énoncés SQL. Puis, je relisais le fichier sur le serveur (PHP 5)
via PHPmyadmin, et cette fois-ci, les caractères problématiques
étaient devenus des points d'interrogation.

Ma solution : demander au client de remplacer ces caractères dans
sa base de données. Il y en avait des milliers...

Cela dit, je suppose que la BDD a le jeu Windows 1252 et que UTF8
ne connaît pas les caractères problématiques même si le fichier
SQL semble bien contenir des caractères encodés (mais comme je ne
peux pas lire directement le fichier et que je n'ai pas essayer
de l'afficher en HTML avec le jeu UTF8...).

En ce qui concerne le problème soulevé, il n'y aurait qu'un petit
nombre de caractères à remplacer (4 peut-être).


Denis
Olivier Miakinen
2010-05-28 10:07:38 UTC
Permalink
Bonjour,
Post by Denis Beauregard
J'ai eu un problème de ce genre récemment.
Le client me fournissait les données dans un fichier Excel de
plusieurs Mo. Je l'enregistrais en texte tabulé et je le lisais
avec Easy PHP et PHPmyadmin.
« Texte tabulé », je suppose que cela veut dire du texte simple, avec un
caractère TAB (08) entre chaque champ ? Est-ce que tu avais le choix du
jeu de caractères, par exemple CP1252, CP850, UTF-8, ISO-8859-1 ou
ISO-8859-15 ?
Post by Denis Beauregard
Les caractères posant problème étaient lus correctement et bien
affichés chez moi (j'ai Seamonkey 1.1.7).
Avec quel jeu de caractère déclaré (ou quel jeu reconnu) ? Pour le
savoir, et éventuellement le changer, dans SeaMonkey en français sur
Windows, c'est : Affichage > Encodage des caractères.
Post by Denis Beauregard
Il s'agit de : l'apostrophe de Word ’/', le …/..., le �"/oe et
l'apostrophe inverse ‘/'. Tous les autres caractères passaient
bien (mais mon client pourrait éventuellement utiliser d'autres
caractères).
Ah, voilà du concret ! Un grand merci pour cela, on va avancer.

’ = U+2019
Ce caractère existe à la position 0x92 dans CP1252, mais pas dans
ISO-8859-1 ni ISO-8859-15.

… = U+2026
Ce caractère existe à la position 0x85 dans CP1252, mais pas dans
ISO-8859-1 ni ISO-8859-15.

�" = U+FFFD U+0022
Tu as eu un problème à l'encodage car U+FFFD est le caractère de
remplacement. Je suppose avec ta translittération en « oe » que tu
voulais parler de « �" » : ce caractère existe à la position 0x9C dans
CP1252, à la position 0xBD dans ISO-8859-15, et nulle part dans ISO-8859-1.

‘ = U+2018
Ce caractère existe à la position 0x91 dans CP1252, mais pas dans
ISO-8859-1 ni ISO-8859-15.

Cf. <http://people.w3.org/rishida/scripts/uniview.fr/conversion.html> et
<http://www.miakinen.net/vrac/charsets/?or=4>.
Post by Denis Beauregard
[...]
Ma solution : demander au client de remplacer ces caractères dans
sa base de données. Il y en avait des milliers...
D'autres solutions devaient être possibles, à commencer par changer le
charset de lecture lors de l'accès à la base de données.

Autre possibilité :
$latin1 = iconv('Windows-1252', 'ISO-8859-1//TRANSLIT', $cp1252);
Post by Denis Beauregard
Cela dit, je suppose que la BDD a le jeu Windows 1252
Certainement, d'après les caractères que tu cites comme ayant posé des
problèmes.
Post by Denis Beauregard
et que UTF8 ne connaît pas les caractères problématiques
Non, ça c'est impossible. UTF-8 connaît *tous* les caractères de *tous*
les jeux de caractères utilisables couramment. C'est ISO-8859-1 qui ne
connaît pas les caractères en question.
Post by Denis Beauregard
[...]
En ce qui concerne le problème soulevé, il n'y aurait qu'un petit
nombre de caractères à remplacer (4 peut-être).
Il y en a 27 actuellement, et il pourrait y en avoir jusqu'à 32 si
Microsoft décide d'en rajouter :
<http://www.miakinen.net/vrac/charsets/?or=4>.

Cela dit, autant laisser faire la fonction iconv(), surtout si tu veux
les translittérer (remplacer « ’ » par « ' », « … » par « ... », « �" »
par « oe », « ‘ » par « ` », mais aussi « �' » par « OE », etc.).


Cordialement,
--
Olivier Miakinen
Olivier Miakinen
2010-05-28 10:33:38 UTC
Permalink
Post by Olivier Miakinen
�" = U+FFFD U+0022
Tu as eu un problème à l'encodage car U+FFFD est le caractère de
remplacement. Je suppose avec ta translittération en « oe » que tu
voulais parler de « �" » [...]
[... remplacer] « �" » par « oe », [...] « �' » par « OE », etc.
J'ai eu le même problème, visiblement causé par une translittération
malvenue du robot de modération, lequel croyait remplacer du CP1252 par
de l'ASCII sans remarquer que c'était de l'UTF-8 (d'ailleurs le robot
n'a pas dû changer depuis des années, bien avant qu'UTF-8 soit autorisé
dans les groupes).

Cordialement,
--
Olivier Miakinen
WebShaker
2010-05-28 22:31:47 UTC
Permalink
Post by Olivier Miakinen
Cela dit, autant laisser faire la fonction iconv(), surtout si tu veux
les translittérer (remplacer « ’ » par « ' », « … » par « ... », « �" »
par « oe », « ‘ » par « ` », mais aussi « �' » par « OE », etc.).
Hum.
Ok pourquoi n'y avais je pas pensé!!
merci je vais faire ca.

Etienne

Continuer la lecture sur narkive:
Loading...