Bonjour,
Le 24/04/2013 22:56, Jean Francois Ortolo a écrit :
>
> [...]
>
> Or, bizarre d e chez bizarre, j'ai du convertir tous mes scripts,
> sauf mes scripts contenant des fonctions de parsing html.
>
> Ces fonctions utilisent toujours strpos(), str_replace() (
> uniquement pour remplacer une chaîne ascii par une autre ), subtr() et
> strrpos().
>
> Par quelle magie, ces fonctions iso ,qui traitent dans mes scripts
> des chaînes de caractères en utf8 , fonctionnent normalement ?
Tout dépend du traitement que tu fais, il n'y a pas forcément de raison
que cela plante. Par exemple, si tu cherches "déjà" en UTF-8 dans une
chaîne UTF-8 valant "Je suis déjà passé à UTF-8", ce sera comme si tu
cherchais "déjà " en Latin1 dans "Je suis déjà passé à UTF-8", et
forcément il y est.
C'est assez logique, puisque contrairement à ce que tu sembles penser
les fonctions strpos(), str_replace() et autres ne connaissent rien à
ISO-8859-1 : elles se contentent de travailler sur des octets.
En outre, si les mots que tu cherches sont de l'ASCII 7 bits, alors ils
sont strictement identiques en UTF-8 et en ISO-8859-1, et donc tu peux
même mélanger les deux encodages dans ce cas précis.
> Est-il possible, que pour certaines versions de php ( 4 et plus ),
> ces fonctions détectent automatiquement l'utf8, et le traitent normalement ?
Absolument pas. Ces fonctions traitent normalement des octets non nuls
(valeurs comprises entre 1 et 255, ou entre 0x01 et 0xff) en se foutant
royalement de savoir si c'est de l'UTF-8, du Big5 ou de l'EBCDIC. Il se
pourrait même que la valeur 0 soit gérée, je ne sais plus ce que j'avais
lu dans la doc car il n'y a pas de raison de la rencontrer dans un texte
normal.
Et donc, ça ne marche pas parce que l'encodage est détecté, ça marche
parce que la plupart du temps on se contrefout de l'encodage. Bien sûr,
si tu comptes que strlen("déjà") fasse 4 et pas 6, là l'encodage est
important.
Cordialement,
--
Olivier Miakinen