Besoin d'astuce Substr

jdaviaud Messages postés 151 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 8 octobre 2013 - 28 juin 2006 à 11:17
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 - 28 juin 2006 à 14:23
Voila, j'ai besoin d'utiliser la fonction substr pour n'afficher que les 50 premiers caractères d'une phrase si elle est plus longue

le probleme c'est que je fais un site multi langues dont le francais et le grec

pour le francais pas de probleme, ca me donne le résultat escompté par contre pour le grec qui pour des questions de compatibilité utilise des caractères de la forme ο et autres ben au lieu de me couper a 50 caractères va me couper a 7 ou 8

quelqu'un aurait une astuce pour qu'il me face ca tsur la chaine finale et non sur le code HTML de départ ?

merci d'avance

6 réponses

DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
28 juin 2006 à 11:56
Salut,
peut etre une solution qui utilise les expressions régulières, voici l'algo:
SI versionSite == 'fr' ALORS
   ecrire (découper($chaine));
SINON
   sous_chaine = '';
   carac = 0;
   FAIRE
      SI match(masque,chaine,correspondances) ALORS
         POURiter (correspondances à tempon)
            sous_chaine .= tempon
         FINPOURiter
         carac++;
      FINSI
   TQ (carac<50);
FINSI

Je te laisse la dection de la langue et le substr, voici le code utilisant les regex:

$substring = '';
$char = 0;
do {
   $pattern = "`^(&#[0-9]{3})`";
   if (preg_match($pattern,$my_string,$matches)) {
      foreach ($matches as $buffer) {
         $substring .= $buffer;
      }
      $char++;
   }
} while ($char < 50);

En supposant que tous les caractères grecs sont formés de la façon que tu as décrite.
0
jdaviaud Messages postés 151 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 8 octobre 2013
28 juin 2006 à 12:09
pourrais tu me documenter un petit peu ta fonction ? car je n'y connais malheuresement pas grand chose aux expressions regulieres

j'ai fait un teste tel quel de ta fonction avec
$my_string = "&#922;&#941;&#957;&#964;&#961;&#959; &#928;&#959;"

et comme resultat de $substring ca m'a retourné "&#922&#922&#922&#922&#922&#922&#922&#922"
0
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
28 juin 2006 à 12:49
J'ai fait compliqué pour rien. de plus mon masque n'est pas bon.
Voici une version plus soft et qui fonctionne bien (aprés test contrairement à la 1ere).

$my_string = "&#922;&#941;&#957;&#964;&#961;&#959;&#928;&#959;";
$substring = '';
$stop = FALSE;
$i = 0;
$num = 0;



do {
   $char = substr($my_string,$i,6);
   if ($char != "") {
      echo "$char
";
      $i += 6;
      $num++;
   } else {
      $stop = TRUE;
   }
} while (!$stop && $num < 50);
echo "Il y a $num caractères dans la chaine "$my_string"";

On boucle tant que $stop est faux et que le nombre de caractères est inférieur à 50.
Dans cette boucle, on récupère le caractère en déplaçant le pointeur de 6 chars, si la chaine est non vide on affiche sinon on retourne false et sort de la boucle.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 juin 2006 à 14:11
Ouais, sinon tu peux t'en sortir en installant l'extension mbstring, en attendant mieux.
http://fr2.php.net/manual/fr/ref.mbstring.php
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jdaviaud Messages postés 151 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 8 octobre 2013
28 juin 2006 à 14:12
oui j'avais commencé à faire comme ca mais dans ce cas ca fonctionne qu'avec une chaine toute attachée sans espaces, ponctuation ... c'est la que je bloque justement
0
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
28 juin 2006 à 14:23
Oui en effet.
Malgrés tout, je pense que pour un traitement plus complexe, il faut utiliser les expReg. Le problème c'est que je n'ai aucune connaissance dans les caractères grecs. Si tu as une adresse avec tous les caractères encodés avec le jeu grec, je pourrais peut etre t'aider d'avantage.
0
Rejoignez-nous