Zerosquare (./2734) :en pas unicode, t'as pas de problème de comptage de caractères avec accent...
Meowcate : je ne comprends pas, comment tu as pu faire du PHP depuis tant d'années sans jamais tomber sur une seule chaîne Unicode, ou même simplement avec des accents ?
Released: 23 June 2001
>>> 'é' + 'é' '\xc3\xa9\xc3\xa9' >>> 'e' + u'é' u'e\xe9' >>> 'é' + u'é' Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)En Python 3, impossible de mélanger les deux :
>>> b'e' + 'e' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytes to str >>> 'e' + b'e' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Can't convert 'bytes' object to str implicitlyAutomagiquement, 90% des bugs des programmes Python 2 disparaissent, du coup.
Meowcate (./2740) :Oui mais personne n'a une liste exhaustive, et il y un risque de faute de frappe, etc.
On a par ex une variable "role" où l'on vérifie si la valeur est "admin", "user", "redactor", etc
Pen^2 (./2744) :Ça a des avantages quand tu récupères une base de données et que tu dois deviner ce qu'elle contient (et que le code source est moins clair que la structure de la base).
(en plus c'est inefficace, c'est long de comparer des String)
Meowcate (./2731) :Ce n'est pas un bogue, c'est exactement le comportement attendu des fonctions de chaînes de caractères style C (c'est la même chose en C), ça compte les octets, pas les codepoints Unicode et encore moins les caractères logiques (U+0065 LATIN SMALL LETTER E + U+0301 COMBINING ACUTE ACCENT = 2 codepoints, mais un seul caractère logique, équivalent à U+00E9 LATIN SMALL LETTER E WITH ACUTE). C'est exactement la même chose en C.
J'ai bloqué un moment avant de comprendre ce bug PHP. En faisant un substr (substring), en partant de la position 0 du string et demandant 25 caractères de long, je n'avais jamais le bon résultat.
En testant avec un strlen (string lenght), le texte demandé contient en fait 26 caractères.
Tout ça parce qu'il y a un "é".
Pen^2 (./2742) :C'est effectivement immonde, pas sûr et et tout ce que tu veux, mais malheureusement il n'y a pas 36 solutions en PHP puisque c'est un langage dynamique
Oui mais personne n'a une liste exhaustive, et il y un risque de faute de frappe, etc.
Peut-être que parfois tu n'a pas le choix, mais tu n'arriveras pas à me convaincre que c'est sain
Zeph (./2750) :Normalement l'éditeur repère ce genre d'erreurs, non ?
une typo dans le nom de la constante
Zeph (./2750) :Je fais encore de la résistance concernant les commentaires de mon code, mais pour le reste (fonctions, variables, valeurs de contrôle, etc) tout est en anglais. Ceci explique peut-être cela.
Bon sinon effectivement pour faire du PHP de façon professionnelle et ne jamais être tombé sur des problèmes improbables faute d'utiliser mb_* il faut être sacrément chanceux
Meowcate (./2753) :Heu je suis pas sûr de comprendre, ces fonctions servent à traiter des inputs utilisateur, données récupérées dans une BDD, etc. mais en quoi la langue dans laquelle tu codes joue sur quoi que ce soit ?
Je fais encore de la résistance concernant les commentaires de mon code, mais pour le reste (fonctions, variables, valeurs de contrôle, etc) tout est en anglais. Ceci explique peut-être cela.