IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Coupure après x caractères sans couper un mot


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2009
    Messages : 81
    Points : 59
    Points
    59
    Par défaut Coupure après x caractères sans couper un mot
    Bonjour.

    Pour faire apparaitre le début d'un résumé (les 200 premiers caractères)
    j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php echo substr ($row_article['resume'], 0, 200); ?>
    Mais comment faire pour ne pas couper au milieu d'un mot?
    Si la coupure est au milieu d'un mot, je voudrais qu'elle se fasse avant ce mot, c'est à dire au niveau du blanc précédent.

    Est ce que quelqu'un pourrait m'aider s'il vous plait?

    Merci beaucoup.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Il n'existe pas de fonction PHP pour faire cela. Tu pourrais faire une boucle qui scrute tous les caracteres a partir du 200eme mais qui s'arretera s'il trouve un espace.

    un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <? php 
    $i=200;
    $str = $row_article['resume'];
    while($str{$i} !=' ') $i--;
    $result = substr ($row_article['resume'], 0, $i);
    ?>
    J'ai pas testé.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Plus simplement il existe strpos() qui devrait répondre à ton problème.Ou plutôt strrpos()... A voir.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (strlen($texte)>200) {
    			$texte = substr($texte,0,200);
    			$espace = strrpos($texte, " ");
    			$texte = substr($texte, 0, $espace)."..."; 
    		}

  5. #5
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    Bonjour,
    Pour identifier la position de la coupure, tu teste le caractère 201
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    si le ceractère 201 est :
    <ul><li style="">Un espace</li><li style="">Un virgule</li><li style="">Un point</li><li style="">...</li></ul>
    => la coupure n'est pas au milieu d'un mot. 
    Sinon si le caractère 201 est :
    <ul><li style="">Une lettre</li><li style="">Un chiffre</li><li style="">....</li></ul>
    => la coupure est au milieu d'un mot.
    Dans le deuxième cas tu peut chercher la position du premier espace à partir du caractère 200. il y a des fonctions PHP permettant de retourner la position de la première occurrence d'un caractère donné en commençant d'une position donné.

  6. #6
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Voici la fonction :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    <?php
    /*
    $chaine représente la chaîne à découper
    Si 'debut' est positif, la chaîne retournée commencera au caractère numéro 'debut', dans la chaîne 'chaine'. Le premier caractère est numéroté zéro.
    Si 'debut' est négatif, la chaîne retournée commencera au caractère numéro 'debut' à compter de la fin de la chaîne 'chaine'.
    Si 'max' est fourni et est positif, la chaîne retournée contiendra au plus 'max' caractères, en commençant à partir du caractère 'debut' (en fonction de la taille de la chaîne 'chaine').
    Si 'chaine' est plus petite que 'debut', substr() retournera FALSE.
    Si 'max' est fourni et négatif, alors le même nombre de caractères sera omis, en partant de la fin de la chaîne 'chaine'. Si 'debut' représente une position hors de la chaîne, une chaîne vide sera retournée.
    $ponct représente le bout de chaîne [...], mais vous pouvez mettre ce qui vous plaira
    $url représente le lien de la chaîne [...], en général il s'agit du lien de l'article complet.
    */
     
    // Début de la fonction
    function truncate($chaine,$debut,$max,$url,$ponct=' [...]')
    	{
    		if (strlen($chaine) >= $max)
    			{
    				$chaine = substr($chaine, $debut, $max);
    				$espace = strrpos($chaine, " ");
    				$chaine = substr($chaine, $debut, $espace).' <a href="'.$url.'"> '.$ponct.'</a>';
    				return $chaine;
    			}
    	}
     
    // Exemple avec un bout de texte
    $texte = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent id urna. Ut at
    odio. Suspendisse sed lacus. Suspendisse nulla lectus, malesuada gravida, auctor et, dictum sit
    amet, nisl. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In
    nisi nunc, suscipit ac, dictum vitae, vestibulum et, nunc. Pellentesque dapibus ante a ante. Morbi
    dui magna, tincidunt in, pulvinar pellentesque, accumsan malesuada, dolor. Vestibulum tempor nibh in
    justo. Vestibulum ante justo, posuere quis, suscipit id, tristique id, diam. Curabitur cursus rutrum
    sem.";
     
    // Affichage par exemple du texte en commencant au premier caractère, jusqu'à l'emplacement du caractère 70
    echo truncate($texte, 0, 70, "http://www.adresse.com");
     
     
    ?>

  7. #7
    jnore
    Invité(e)
    Par défaut
    Est-ce que la fonction wordwrap ne fairait pas l'affaire?

  8. #8
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    ben non
    Si le paramètre cut vaut TRUE, la césure de la chaîne sera toujours à la taille width plus petit. Si vous avez un mot qui est plus long que la taille de césure, il sera coupé en morceaux : voir le second exemple.

Discussions similaires

  1. Génération mot de passe sur 6 caractères sans doublon.
    Par SirDarken dans le forum Langage
    Réponses: 11
    Dernier message: 14/04/2010, 11h23
  2. Couper un mot à partir d'un caractère
    Par floctc dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 14/04/2010, 11h18
  3. Réponses: 2
    Dernier message: 25/06/2009, 16h12
  4. Découper une chaine sans couper les mots
    Par jgoguel dans le forum Langage
    Réponses: 3
    Dernier message: 31/10/2007, 12h22
  5. Réponses: 2
    Dernier message: 22/04/2006, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo