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 :

Scinder les mots trop longs d'une chaine


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Par défaut Scinder les mots trop longs d'une chaine
    Bonjour,

    Je suis à la recherche d'une fonction permettant de scinder les mots trop long d'une chaine.

    Par exemple :
    $text = 'ccccccccccccccccccccccccccccccccccccccccccccccccccccccc'; (etc...)

    Mise en situation :
    Si vous avez un tableau ou une div de 100px de largeur, ce texte va casser votre mise en page.

    Complexité :
    Il peut aussi y avoir des liens ou des images dans cette chaine qu'il ne faut pas scinder sinon ça ne fonctionne plus.

    Exemple de complexité :
    $text = 'cccccccccccccccccccccccccccccc<a href="http://www.monsite.com/news/12/c-mon-titre-de-news.html">news</a>';


    Pourriez-vous m'aider s'il vous plait ?

    Merci d'avance

  2. #2
    Membre confirmé Avatar de alejandro
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2004
    Messages : 167
    Par défaut
    Bonjour,

    De tête vite fait comme ça :

    1. Faire un explode() sur les espaces " ".
    2. Faire un strip_tags() sur chaque chaine de ton explode.
    3. Calculer la longueur de ta chaine avec strlen().
    4. Couper ta chaine si nécessaire avec des substr().

    Voilà ce par quoi je commencerais à ta place.

    Bonne continuation sur les forums.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Par défaut
    Salut,

    Merci pour ta suggestion.

    Donc je suis d'accord sur ces points :
    1. explode()
    3. strlen()
    4. substr()

    Mais je ne comprends pas le "2." (strip_tags()). D'après le manuel php, cette fonction autorise des balises html dans une chaine, mais ça n'empêche pas le découpage (le passage aux étapes 3 et 4 pour cet array).

  4. #4
    Membre confirmé Avatar de alejandro
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2004
    Messages : 167
    Par défaut
    Bonjour Angel31,

    Mais je ne comprends pas le "2." (strip_tags()). D'après le manuel php, cette fonction autorise des balises html dans une chaine, mais ça n'empêche pas le découpage (le passage aux étapes 3 et 4 pour cet array).
    Cette fonction supprime les tags html dans une chaine de caractères, hors, comme tu l'a expliqué :

    Il peut aussi y avoir des liens ou des images dans cette chaine qu'il ne faut pas scinder sinon ça ne fonctionne plus.
    Donc pour connaitre la longueur réelle de ta chaine (celle que tu vas afficher à l'écran), il te faut une chaine sans tags html, la fonction strip_tags() va te les supprimer ce qui te permettra de connaitre la longueur réelle de ta chaine en nombre de caractères.

    Ensuite par contre lorsque tu vas découper, bien entendu que tu vas devoir remettre tes tags. Donc après le point 4, tu recherches les endroits où tu dois remettre les tags que tu as enlevés, par exemple tu te sers de ta chaine originale pour retrouver et insérer parmis tes plus petites chaines les tags aux bons endroits.

    Donc soit tu remet tes tags soit sinon tu pourrais envisager d'utiliser des expressions régulières pour retrouver chaque point de découpage dans ta chaine d'origine et retourner un tableau contenant chaque sous-chaine, tags inclus.

    En tout cas bon courage car c'est une fonctionnalité qui ne me paraît pas si simple à implémenter.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Par défaut
    Merci pour tes explications.

    Je vais essayer de faire quelque chose et je te tiens au courant si j'ai d'autres questions.
    Si j'y arrive, je mettrais le code source à disposition car c'est une fonction très utile

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Par défaut
    Il y a un gros probleme avec l'explode de l'espace, les liens sont :
    <a href...>texte texte</a>

    Il y a un espace entre a et href ainsi que dans le texte

  7. #7
    Membre expérimenté
    Avatar de Tesing
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Par défaut
    salut,

    je crois que ca peut aussi se faire avec une expression régulière et la fonction preg_match_all.

    Bon courage

  8. #8
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    fait le strip_tags() en premier avant de faire l'explode

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Par défaut
    Dans ce cas on perd "le fil". On ne sait plus où doivent être les liens par exemple.

    ça devient compliqué tout ça

  10. #10
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    et ou est le problème ?

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    A priori un simple wordwrap() devrait faire l'affaire.

    http://fr.php.net/manual/fr/function.wordwrap.php

    Sachant que présenter un tag html de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <a 
    href="toto.
    php">
    toto</a>
    n'a pas d'incidence (hormis que ce soit un peu cradingue), utiliser un \n dans un mot trop long devrait rajouter un espace invisible sur lequel se fera la césure.

    Non vérifié, donc à tester

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Par défaut
    Citation Envoyé par Seb33300 Voir le message
    et ou est le problème ?
    C'est sur que supprimer les liens ça ne pose aucune problème, après tout, on s'en fou


    Merci pour ta solution petibidon, ça fonctionne parfaitement (pour le moment en tout cas) !

  13. #13
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 929
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 929
    Par défaut
    Tu peux aussi simplement faire ça en HTML + CSS, en mettant une largeur à ton div + un overflow:hidden (voire auto) en CSS. Ca ne fonctionne évidemment pas directement sur une balise td, mais dans ce cas là il suffit de mettre ces propriétés à une balise div directement enfant de la balise td.

Discussions similaires

  1. Scinder un texte trop long d'une cellule en plusieurs cellules
    Par Jimmatdycol dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 20/02/2014, 10h33
  2. Comment couper les mots trop longs
    Par marcello2 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 09/06/2009, 08h00
  3. Modifier les mots "longs" d'une chaine de caractères
    Par Coussati dans le forum Débuter
    Réponses: 3
    Dernier message: 23/06/2008, 05h45
  4. Réponses: 3
    Dernier message: 27/04/2008, 19h10
  5. [RegEx] Trouver les mots en majuscule dans une chaine
    Par Boeing dans le forum Langage
    Réponses: 2
    Dernier message: 15/10/2007, 23h44

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