substr et caracteres spéciaux - PHP - Programmation
Marsh Posté le 25-05-2008 à 21:48:57
Le probleme vient du "é" qui est apparament decomposé par substr comme étant un caractere special. Mais je capte pas pourquoi il fait ca...
Marsh Posté le 26-05-2008 à 07:07:29
Non, a l'origine non. Mais je sais pas pourquoi ce substr transforme le é en é
Marsh Posté le 26-05-2008 à 08:23:52
Non impossible, substr ne fait pas ce genre de transformation.
Es-tu certain du contenu de ta chaîne? Si tu fais un echo de la chaîne que tu passes à substr tu obtiens quoi? Penses à bien regarder la source de la page si tu es sur du web.
Marsh Posté le 26-05-2008 à 08:40:39
Oui, j'ai fait ce test. Juste avant le substr j'ai "Le Northrop B-2 Spirit est un bombardier stratégique" et juste après mais uniquement quand je coupe au 52ème caractère, il me sort "Le Northrop B-2 Spirit est un bombardier strat&eacut...".
Si je coupe au 54ème caractère, tout est ok. C'est comme si pour lui le "é" représentait plusieurs caractères...
Marsh Posté le 26-05-2008 à 09:21:26
Arf! Pas bete. J'vais tester. Merci!
Marsh Posté le 26-05-2008 à 11:07:04
Ill Nino a écrit : Substr me retourne ça:
|
T'es pas censé avoir des entités (genre é) à ce niveau là. Les entités ne sont nécessaires que tout à la fin, lors de l'affichage dans une page HTML, et encore s'il y a des problèmes d'encoding. Utilise html_entity_decode() (en faisant bien gaffe à l'encoding) pour avoir un truc propre.
Ensuite si tu choisis l'utf-8, essaye d'avoir l'extension mbstring d'installée, pour utiliser plutôt la fonction mb_substr
Marsh Posté le 26-05-2008 à 11:10:33
FlorentG a écrit : |
Le "é" comme ca c'est pas plutot a decoder par htmlspecialchars_decode()?
Marsh Posté le 26-05-2008 à 11:14:02
Ill Nino a écrit :
|
htmlspecialchars c'est uniquement les caractères spéciaux (& < > " '), pas les entités en dehors de ça
Marsh Posté le 26-05-2008 à 11:20:39
Arf! J'ai pas compris le truc alors. "é" c'est une entité et pas un caractère spécial?
Marsh Posté le 26-05-2008 à 11:23:17
Ill Nino a écrit : Arf! J'ai pas compris le truc alors. "é" c'est une entité et pas un caractère spécial? |
Nan. Je me suis mal exprimé en fait
é c'est un caractère, et é une entité. Maintenant y'a quelques entités de base : & < > ". Celle-là sont générée par htmlspecialchars, et décodées par htmlspecialchars_decode.
Ensuite y'a les entités pour les caractères (pas forcément spéciaux) : é è. Celles-là sont gérées par htmlentities et htmlentities_decode.
Marsh Posté le 26-05-2008 à 11:25:29
Ah ok. D'accord. Donc en gros si c'est (& < > " ') faut htmlspecialchars et pour tout le reste c'est htmlentities. C'est ca?
Marsh Posté le 26-05-2008 à 11:42:42
Yes. Note que htmlentities fait aussi htmlspecialchars, donc faut pas faire les deux.
Si tu maîtrise bien ton encoding, t'as pas besoin d'htmlentities, t'aura juste besoin de faire un htmlspecialchars pour éviter de pouvoir injecter n'importe quoi dans la page
Marsh Posté le 26-05-2008 à 11:45:14
OK. D'ailleurs ce truc de l'encoding j'ai pas vraiment compris non plus. C'est quoi les UTF-8 et compagnie? Vaste question p'etre non?
Marsh Posté le 26-05-2008 à 11:46:57
Note aussi que la solution de NazzTazz est la meilleure. Imagine la phrase :
Citation : Ill Nino est content des réponses qu'on lui a donné |
Imagine tu ne gardes que les 16 premiers caractères, ça donne :
Citation : Ill Nino est con |
Pas top
Marsh Posté le 26-05-2008 à 11:49:37
C'est clair. Elle me va parfaitement sa solution!
Marsh Posté le 26-05-2008 à 14:35:01
FlorentG a écrit : Note aussi que la solution de NazzTazz est la meilleure. Imagine la phrase :
|
L'encoding c'est ce qui se déclare dans le HEAD de la page c'est ça? Utf-8 c'est le plus répandu?
Marsh Posté le 22-12-2009 à 11:45:50
Salut NazzTazz et merci pour ta fonction.
Mais STRREV ne fonctionne pas avec UTF-8 : cf. http://www.php.net/manual/fr/function.strrev.php#52788
Marsh Posté le 25-05-2008 à 21:36:33
Bonjour,
Je souhaite couper cette chaine:
"Le Northrop B-2 Spirit est un bombardier stratégique et l'un des plus célèbres avions furtifs actuels des États-Unis."
au 52ème caractere. Mais en faisant ça:
Substr me retourne ça:
Le Northrop B-2 Spirit est un bombardier strat&eacut...
J'ai regardé en coupant au 54ème caractère ça passe, mais sinon non.
Substr a l'air de mal gérer les caractères spéciaux. Quelqu'un a une idée du problème?
A+
---------------
Faut qu'on court comme des lions, des tigres et des ours!