PHP preg_replace

Résolu/Fermé
graphh Messages postés 37 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 juillet 2011 - 15 avril 2010 à 15:06
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 16 avril 2010 à 09:52
Bonjour à tous,

Je suis actuellement dans la réalisation d'un site personnel, et j'aimerai utiliser une fonction de "coupure" de phrase qui remplace la suite par des "...".

J'ai vu à de multiple reprise la fonction substr, mais j'ai un peu de mal avec son fonctionnement.

Je me suis donc rabattu sur ce script:

$nbcar = 25;
if (strlen($donnees['titre']) > $nbcar)
{
$title_cut = ereg_replace("(.{".$nbcar."})( .*)$","\\1 ...", $donnees['titre']);
}
else
{
$title_cut = $donnees['titre'];
}
echo $title_cut ;

Une erreur:
Deprecated: Function ereg_replace() is deprecated

Je googlelise, et remplace ereg par preg, mais il y a une modif a faire dans mes variables, que je n'arrive pas à placer. Des / / si j'ai bien compris.

Quelqu'un pourrait-il m'aider à les insérer? ou me guider sur une autre solution?

D'avance, merci.
A voir également:

3 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
Modifié par kij_82 le 15/04/2010 à 17:24
Bonjour,

Je ne vois pas où est le problème avec la fonction substr. Il suffit de passer:
- argument 1 : ta chaine de caractère
- argument 2 : index de départ de la coupure
- argument 3 : taille de texte à découper depuis l'index de départ

Du moins je trouve son utilisation plus simple que ce que tu as utilisé (désolé si je n'y fais pas plus référence, ça reste obscure pour moi les expressions régulières, tant que je n'en ai pas la réelle utilité ^^)

Pour l'utiliser, reste donc à faire ceci:
$nbCar = 25;   
$chaine = "coucou, ceci est un test de coupure via la fonction substr sur une chaine de caractère longue";   

$cut_str = $chaine; 
if ( sizeof($cut_str) > $nbCar ){ 
   $cut_str = substr($chaine,0,$nbCar)."...";   
} 
echo $cut_str;  



~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~
0
graphh Messages postés 37 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 juillet 2011 1
15 avril 2010 à 17:39
Merci de la réponse.

$nbCar = 15;
$chaine = $donnees['titre'];
$cut_str = $chaine;
if ( sizeof($cut_str) > $nbCar )
{
$cut_str = substr($chaine,0,$nbCar)."...";
}
echo $cut_str;
Ca donnerait ca dans mon code. Je n'ai certe plus d'erreur, mais ca ne coupe pas mon "titre" :/

Quelle est l'utilité du ,0, dans le substr?

Merci
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
Modifié par kij_82 le 15/04/2010 à 18:05
$nbCar = 15; 
$cut_str = $donnees['titre']; 
if ( sizeof($cut_str) > $nbCar ) 
{ 
$cut_str = substr($cut_str,0,$nbCar)."..."; 
} 
echo $cut_str;  


J'ai corrigé, j'avais fais une petite faute.
Le '0' est l'index de départ, là où la fonction substr doit commencer la "sous chaine".
Donc l'instruction : substr("blablabla",0,5) devrait renvoyer les 5 premiers caractères de 'blablabla'.

Je n'ai pas tester ce que je t'ai mis, mais logiquement ça devrait donner le résultat. Si ce n'est pas le cas ce n'est pas normal (fais le moi savoir et je jetterai un oeil demain)
Si ça ne marche pas, es-tu sûr que le titre fais plus de 15 caractères ? Le script coupe uniquement et ajouter les "..." uniquement si le titre dépasse la taille maximum autorisée.
Pourras-tu afficher la taille du titre juste en guise de traces : echo sizeof($donnees["titre"])
0
graphh Messages postés 37 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 juillet 2011 1
16 avril 2010 à 00:09
$nbCar = 25;
$cut_str = $donnees['titre'];
if (strlen($cut_str) > 25)
{
echo ''.substr($cut_str, 0, 25).'... ';
}
else
{
echo ''.$cut_str.' ';
}

Voici le script qui fonctionne :)

Merci pour le coup de main!
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
16 avril 2010 à 09:52
Ha ok, c'est l'utilisation de strlen dans la condition qui fait que ça fonctionne, effectivement :)
0