Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
921 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  substr et caracteres spéciaux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

substr et caracteres spéciaux

n°1736884
Ill Nino
Love
Posté le 25-05-2008 à 21:36:33  profilanswer
 

Bonjour,
 
Je souhaite couper cette chaine:

Citation :

"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:

Code :
  1. $str = substr($str,0,52).'...';


 
Substr me retourne ça:  

Citation :

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!
mood
Publicité
Posté le 25-05-2008 à 21:36:33  profilanswer
 

n°1736894
Ill Nino
Love
Posté le 25-05-2008 à 21:48:57  profilanswer
 

Le probleme vient du "é" qui est apparament decomposé par substr comme  étant un caractere special. Mais je capte pas pourquoi il fait ca...


---------------
Faut qu'on court comme des lions, des tigres et des ours!
n°1736901
art_dupond
je suis neuneu... oui oui !!
Posté le 25-05-2008 à 21:57:34  profilanswer
 

chez moi ça marche bien.
 
elle vient d'où ta chaine ? il n'y a pas déjà é dedans ?


---------------
oui oui
n°1736962
Ill Nino
Love
Posté le 26-05-2008 à 07:07:29  profilanswer
 

Non, a l'origine non. Mais je sais pas pourquoi ce substr transforme le é en é


---------------
Faut qu'on court comme des lions, des tigres et des ours!
n°1736975
dwogsi
Défaillance cérébrale...
Posté le 26-05-2008 à 08:23:52  profilanswer
 

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.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1736982
Ill Nino
Love
Posté le 26-05-2008 à 08:40:39  profilanswer
 

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...


---------------
Faut qu'on court comme des lions, des tigres et des ours!
n°1737000
Ill Nino
Love
Posté le 26-05-2008 à 09:21:26  profilanswer
 


Arf! Pas bete. J'vais tester. :) Merci! :jap:


---------------
Faut qu'on court comme des lions, des tigres et des ours!
n°1737069
FlorentG
Posté le 26-05-2008 à 11:07:04  profilanswer
 

Ill Nino a écrit :

Substr me retourne ça:  

Citation :

Le Northrop B-2 Spirit est un bombardier strat&eacut...



T'es pas censé avoir des entités (genre &eacute) à 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

n°1737072
Ill Nino
Love
Posté le 26-05-2008 à 11:10:33  profilanswer
 

FlorentG a écrit :


T'es pas censé avoir des entités (genre &eacute) à 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


Le "é" comme ca c'est pas plutot a decoder par htmlspecialchars_decode()?


---------------
Faut qu'on court comme des lions, des tigres et des ours!
n°1737078
FlorentG
Posté le 26-05-2008 à 11:14:02  profilanswer
 

Ill Nino a écrit :


Le "é" comme ca c'est pas plutot a decoder par htmlspecialchars_decode()?


htmlspecialchars c'est uniquement les caractères spéciaux (& < > " '), pas les entités en dehors de ça :)


Message édité par FlorentG le 26-05-2008 à 11:14:25
mood
Publicité
Posté le 26-05-2008 à 11:14:02  profilanswer
 

n°1737084
Ill Nino
Love
Posté le 26-05-2008 à 11:20:39  profilanswer
 

Arf! J'ai pas compris le truc alors. "é" c'est une entité et pas un caractère spécial?


---------------
Faut qu'on court comme des lions, des tigres et des ours!
n°1737087
FlorentG
Posté le 26-05-2008 à 11:23:17  profilanswer
 

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 :D
 
é c'est un caractère, et &eacute; une entité. Maintenant y'a quelques entités de base : &amp; &lt; &gt; &quot;. 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) : &eacute; &egrave;. Celles-là sont gérées par htmlentities et htmlentities_decode.

n°1737091
Ill Nino
Love
Posté le 26-05-2008 à 11:25:29  profilanswer
 

Ah ok. D'accord. Donc en gros si c'est (& < > " ') faut htmlspecialchars et pour tout le reste c'est htmlentities. C'est ca? :D


---------------
Faut qu'on court comme des lions, des tigres et des ours!
n°1737102
FlorentG
Posté le 26-05-2008 à 11:42:42  profilanswer
 

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

n°1737106
Ill Nino
Love
Posté le 26-05-2008 à 11:45:14  profilanswer
 

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? :/


---------------
Faut qu'on court comme des lions, des tigres et des ours!
n°1737107
FlorentG
Posté le 26-05-2008 à 11:46:57  profilanswer
 

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 :D

n°1737110
Ill Nino
Love
Posté le 26-05-2008 à 11:49:37  profilanswer
 

:D C'est clair. Elle me va parfaitement sa solution! :jap:


---------------
Faut qu'on court comme des lions, des tigres et des ours!
n°1737219
Ill Nino
Love
Posté le 26-05-2008 à 14:35:01  profilanswer
 

FlorentG a écrit :

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 :D


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?


---------------
Faut qu'on court comme des lions, des tigres et des ours!
n°1952335
zeufworld
Posté le 22-12-2009 à 11:45:50  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  substr et caracteres spéciaux

 

Sujets relatifs
Taille "réelle" d'une chaîne de caractèressup des caracteres et rajouter un prefix dans nom de fichier [RESOLU]
Comment lire les X derniers caracteres d'un fichier à distance?SQL Loader - problème d'encodage des caractères accentués
Caracteres speciauxPerl :comment forcer une variable sur un certain nombre de caractères?
Remplacement de caractères dans fichierla meilleure façon de décoder les caractères html
Déclaration dynamique d'un tableau de chaine de caractères 
Plus de sujets relatifs à : substr et caracteres spéciaux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR