jdaviaud
Messages postés151Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention 8 octobre 2013
-
28 juin 2006 à 11:17
DiGhan
Messages postés239Date d'inscriptionsamedi 21 février 2004StatutMembreDerniè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 ?
DiGhan
Messages postés239Date d'inscriptionsamedi 21 février 2004StatutMembreDernière intervention 3 juin 20101 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.
DiGhan
Messages postés239Date d'inscriptionsamedi 21 février 2004StatutMembreDernière intervention 3 juin 20101 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).
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.
jdaviaud
Messages postés151Date d'inscriptionmercredi 8 janvier 2003StatutMembreDerniè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
DiGhan
Messages postés239Date d'inscriptionsamedi 21 février 2004StatutMembreDernière intervention 3 juin 20101 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.