Il me semblait que l'utilisation de section CDATA permettait de
s'abstraire des problèmes de caractères utilisés.
Or, j'ai une erreur avec simple_xml_file, apparemment dûe à un caractère
étrange ($001D).
Je n'ai pas trouvé les limites de cette commande dans la doc php.
Avez-vous davantage d'infos ?
Merci.
Plus simple (et moins source d'erreur) : '/[^x{9}x{A}x{D}x{20}-x{D7FF}x{E000}-x{FFFD}x{10000}-x{10FFFF}]+/u'
Par ailleurs, tu aurais peut-être intérêt à éliminer aussi les caractères de commande #x7f et #x80 à #x9f, ces derniers étant parfois produits par une mauvaise conversion de CP1252 en UTF-8 : '/[^x{9}x{A}x{D}x{20}-x{7E}x{A0}-x{D7FF}x{E000}-x{FFFD}x{10000}-x{10FFFF}]+/u'
Tu peux éventuellement rajouter le #x85 qui est dans la norme, mais vu que -- à ce que j'ai compris -- il est là pour permettre à EBCDIC d'être compatible binaire avec UTF-8 (85 = espace), ça doit être plutôt une bonne chose de le remplacer par une vraie espace ! D'autant que #x85 existe dans CP1252 et représente un caractère fréquent (les points de suspension).
Enfin, si tu veux être à même de détecter plusieurs caractères interdits de suite, et de remplacer chacun d'eux par une espace, tu peux retirer le '+' de la regexp.
Cordialement,
Merci pour ces corrections. Le |, c'est la belle erreur du "ou" que je colle inutilement... Très bien pour les autres caractères à éliminer. Par contre, pour ta dernière remarque, avec le + je devrais détecter plusieurs caractères interdits de suite mais ils seront remplacés en groupe par un seul espace, non ? Et c'est bien ce que je souhaite (avoir une suite d'espace dans un texte n'est pas souhaitable.)
Le 07/01/2011 17:32, Olivier Miakinen a écrit :
Plus simple (et moins source d'erreur) :
'/[^x{9}x{A}x{D}x{20}-x{D7FF}x{E000}-x{FFFD}x{10000}-x{10FFFF}]+/u'
Par ailleurs, tu aurais peut-être intérêt à éliminer aussi les
caractères de commande #x7f et #x80 à #x9f, ces derniers étant
parfois produits par une mauvaise conversion de CP1252 en UTF-8 :
'/[^x{9}x{A}x{D}x{20}-x{7E}x{A0}-x{D7FF}x{E000}-x{FFFD}x{10000}-x{10FFFF}]+/u'
Tu peux éventuellement rajouter le #x85 qui est dans la norme, mais vu
que -- à ce que j'ai compris -- il est là pour permettre à EBCDIC d'être
compatible binaire avec UTF-8 (85 = espace), ça doit être plutôt une
bonne chose de le remplacer par une vraie espace ! D'autant que #x85
existe dans CP1252 et représente un caractère fréquent (les points de
suspension).
Enfin, si tu veux être à même de détecter plusieurs caractères
interdits de suite, et de remplacer chacun d'eux par une espace,
tu peux retirer le '+' de la regexp.
Cordialement,
Merci pour ces corrections.
Le |, c'est la belle erreur du "ou" que je colle inutilement...
Très bien pour les autres caractères à éliminer.
Par contre, pour ta dernière remarque, avec le + je devrais détecter
plusieurs caractères interdits de suite mais ils seront remplacés en
groupe par un seul espace, non ? Et c'est bien ce que je souhaite (avoir
une suite d'espace dans un texte n'est pas souhaitable.)
Plus simple (et moins source d'erreur) : '/[^x{9}x{A}x{D}x{20}-x{D7FF}x{E000}-x{FFFD}x{10000}-x{10FFFF}]+/u'
Par ailleurs, tu aurais peut-être intérêt à éliminer aussi les caractères de commande #x7f et #x80 à #x9f, ces derniers étant parfois produits par une mauvaise conversion de CP1252 en UTF-8 : '/[^x{9}x{A}x{D}x{20}-x{7E}x{A0}-x{D7FF}x{E000}-x{FFFD}x{10000}-x{10FFFF}]+/u'
Tu peux éventuellement rajouter le #x85 qui est dans la norme, mais vu que -- à ce que j'ai compris -- il est là pour permettre à EBCDIC d'être compatible binaire avec UTF-8 (85 = espace), ça doit être plutôt une bonne chose de le remplacer par une vraie espace ! D'autant que #x85 existe dans CP1252 et représente un caractère fréquent (les points de suspension).
Enfin, si tu veux être à même de détecter plusieurs caractères interdits de suite, et de remplacer chacun d'eux par une espace, tu peux retirer le '+' de la regexp.
Cordialement,
Merci pour ces corrections. Le |, c'est la belle erreur du "ou" que je colle inutilement... Très bien pour les autres caractères à éliminer. Par contre, pour ta dernière remarque, avec le + je devrais détecter plusieurs caractères interdits de suite mais ils seront remplacés en groupe par un seul espace, non ? Et c'est bien ce que je souhaite (avoir une suite d'espace dans un texte n'est pas souhaitable.)
Olivier Miakinen
Le 07/01/2011 17:32, je répondais à Olivier Masson :
Document authors are encouraged to avoid "compatibility characters", as defined in Unicode [Unicode]. The characters defined in the following ranges are also discouraged. They are either control characters or permanently undefined Unicode characters:
Document authors are encouraged to avoid "compatibility characters", as
defined in Unicode [Unicode]. The characters defined in the following
ranges are also discouraged. They are either control characters or
permanently undefined Unicode characters:
Document authors are encouraged to avoid "compatibility characters", as defined in Unicode [Unicode]. The characters defined in the following ranges are also discouraged. They are either control characters or permanently undefined Unicode characters:
Par contre, pour ta dernière remarque, avec le + je devrais détecter plusieurs caractères interdits de suite mais ils seront remplacés en groupe par un seul espace, non ? Et c'est bien ce que je souhaite (avoir une suite d'espace dans un texte n'est pas souhaitable.)
Oui, dans ce cas le + se justifie bien.
Le 07/01/2011 19:12, Olivier Masson a écrit :
Par contre, pour ta dernière remarque, avec le + je devrais détecter
plusieurs caractères interdits de suite mais ils seront remplacés en
groupe par un seul espace, non ? Et c'est bien ce que je souhaite (avoir
une suite d'espace dans un texte n'est pas souhaitable.)
Par contre, pour ta dernière remarque, avec le + je devrais détecter plusieurs caractères interdits de suite mais ils seront remplacés en groupe par un seul espace, non ? Et c'est bien ce que je souhaite (avoir une suite d'espace dans un texte n'est pas souhaitable.)
Oui, dans ce cas le + se justifie bien.
Olivier Masson
Le 07/01/2011 19:12, Olivier Miakinen a écrit :
$EXCLUDE_CHAR > /* Control characters (including U+0000 and U+0085) */ 'x{0}-x{8}' . 'x{B}x{C}' . 'x{E}-x{1F}' . 'x{7F}-x{9F}' .
/* Surrogates */ 'x{D800}-x{DFFF}' .
/* Non characters within Arabic Presentation Forms-A*/ 'x{FDD0}-x{FDEF}' . /* FDEF and not FDDF, see errata */
Ça devient énorme (comprendre également que ça va bien au-delà de ma préoccupation de départ) mais au moins c'est générique. Merci pour ces recherches et ce résultat.
Le 07/01/2011 19:12, Olivier Miakinen a écrit :
$EXCLUDE_CHAR > /* Control characters (including U+0000 and U+0085) */
'x{0}-x{8}' . 'x{B}x{C}' . 'x{E}-x{1F}' . 'x{7F}-x{9F}' .
/* Surrogates */
'x{D800}-x{DFFF}' .
/* Non characters within Arabic Presentation Forms-A*/
'x{FDD0}-x{FDEF}' . /* FDEF and not FDDF, see errata */
Ça devient énorme (comprendre également que ça va bien au-delà de ma
préoccupation de départ) mais au moins c'est générique.
Merci pour ces recherches et ce résultat.
Ça devient énorme (comprendre également que ça va bien au-delà de ma préoccupation de départ) mais au moins c'est générique. Merci pour ces recherches et ce résultat.