Besoin d'astuce Substr

Signaler
Messages postés
151
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
8 octobre 2013
-
Messages postés
239
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
3 juin 2010
-
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

Messages postés
239
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
3 juin 2010
1
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.
Messages postés
151
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
8 octobre 2013

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"
Messages postés
239
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
3 juin 2010
1
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.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Ouais, sinon tu peux t'en sortir en installant l'extension mbstring, en attendant mieux.
http://fr2.php.net/manual/fr/ref.mbstring.php
Messages postés
151
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
8 octobre 2013

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
Messages postés
239
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
3 juin 2010
1
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.