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 :

Résumé d'une chaine formatée (balise tronquée) [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Résumé d'une chaine formatée (balise tronquée)
    Bonjour,
    Pour mon système de News, j'ai du texte formaté (avec balises html)
    Je fais un RESUME du texte (les 60 1ers caractères, par exemple) :

    Or, le texte étant formaté, une balise html peut se trouver tronquée, et/ou d'autres non fermées ! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $texte = 'qsdf <u>qfqsdfqsdf <strong>sfqdsdffsdt wqqsdfsdf qsdfqs</strong> qsdqsd qsdqqsd fdsfqsdf fqsdf qsdfq qsdf</u> qsdf sdfqsdfqsdfqsdf.';
    $resume = substr($texte,0,59);
    // on obtient -->
    $resume = 'qsdf <u>qfqsdfqsdf <strong>sfqdsdffsdt wqqsdfsdf qsdfqs</str';
    ?>
    De ce fait, la suite de la page est toute chamboulée !

    Comment m'y prendre pour :
    1- fermer une balise tronquée
    ---> si c'est une balise "ouvrante : la supprimer
    ---> si c'est une balise fermante : la fermer (et la compléter : </str --> </strong>
    2- trouver les balises non fermées ? Et donc les fermer.

    Possible ? / Pas possible ? / Trop compliqué ? / ...

    Note : je sais que la solution la plus simple serait d'enlever toutes les balises html, mais bon ...
      0  0

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Comment m'y prendre pour :
    1- fermer une balise tronquée
    ---> si c'est une balise "ouvrante : la supprimer
    ---> si c'est une balise fermante : la fermer (et la compléter : </str --> </strong>
    Bonsoir,
    Pas chez moi, donc pas d'environnement de test, mais à main levée je commencerais par un truc dans ce genre, à affiner s'il ne marche pas tout à fait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str = preg_replace('#</?[^>]*$#', '', $str);
      0  0

  3. #3
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    2- trouver les balises non fermées ? Et donc les fermer.

    Possible ? / Pas possible ? / Trop compliqué ? / ...
    Je pense que c'est possible.
    Mais je pense aussi que ce n'est pas simple. Tout dépend de ce que tu entends par TROP compliqué...

    Quoi qu'il en soit, cette partie nécessite un environnement de test, je ne peux te répondre sur la vieille bécane de mes parents.
      0  0

  4. #4
    Invité
    Invité(e)
    Par défaut
    Comme c'est pour un tuto, je suis prêt à relever le défi !
    Et si ca n'existe pas encore, j'en ferai une "fonction" ...
    J'ai une 1ère piste ici :
    http://php.developpez.com/faq/?page=...es_parsebbcode

    Compliqué, non.
    Complexe : sans doute
    Réalisable ? Oui, en retroussant ses manches !
      0  0

  5. #5
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Trouver ce genre de balise ouverte sera du gâteau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str = "<p>Un paragraphe</p><p>autre paragraphe tronqué";
    Mais là où ça va se corser, c'est dans ce genre de situations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $str = "<p>un paragraphe <b>avec du gras</b> et troncature";
     
    $str = "<div id='wrapmain'><p>Paragraphe</p><p>autre paragraphe <b>avec du gras tronqué";
    Etc...

    Le problème étant connu, identifié, et résolu dans la plupart des cas : identifier les paires de balises.
    Mais c'est toujours un peu de noeuds au cerveau en prévisions...

    A vue de nez, je pense que l'exemple #3 de la page suivante pourra être utile à la réflexion : http://fr3.php.net/manual/fr/functio...e-callback.php
      0  0

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par s.n.a.f.u Voir le message
    Le problème étant connu, identifié, et résolu dans la plupart des cas : identifier les paires de balises.
    Mais c'est toujours un peu de noeuds au cerveau en prévisions...
    Oui tout à fait !

    En fait, le principe consiste à vérifier un bout de code html, et tester si les balises sont fermées ou non !
      0  0

  7. #7
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Un souci de BBcode auquel j'avais participé, si ça peut aider.

    http://www.developpez.net/forums/d66...back-recursif/
      0  0

  8. #8
    FoxLeRenard
    Invité(e)
    Par défaut
    Bonjour les Amis,
    je n'ais fait qu'une intervention ici, car je suis en déplacement et ne disposes d'un ordinateur que peut de temps par jour ...

    Bref j'en reviens a mon idée de départ, c'est typiquement le probléme de tout les CMS qui est posé, (j'avais sité SPIP) !!

    Ors je viens de trouver sur un site qui gére les CMS un code complet en cours de mise au point, pas le temps ici de l'analysé, désolé les Amis
    ET TELECHARGEABLE !

    Je me l'analyserais a mon retour de Reims.

    Regardez s'il y a matiére pour vous ...
    A++


    http://www.kwsphp.org/index.php?mod=...c=voir&id=8445

    SOURCE
    http://partage.lsi-dev.com/kwsphp/resume.zip
      0  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. ecrire à un endroit précis une chaine formatée
    Par bobyboby dans le forum Bibliothèque standard
    Réponses: 20
    Dernier message: 31/10/2008, 15h53
  2. [sscanf] Lire une chaine formatée contenant des []
    Par gangsoleil dans le forum Bibliothèque standard
    Réponses: 3
    Dernier message: 11/09/2008, 09h09
  3. Fonction pour charger une chaine formaté
    Par dxdiag dans le forum Débuter
    Réponses: 5
    Dernier message: 08/02/2008, 21h35
  4. Convertir une chaine en format heure
    Par Lars dans le forum ASP
    Réponses: 3
    Dernier message: 24/05/2005, 11h44
  5. [langage] cherche script pour formater une chaine
    Par MASSAKA dans le forum Langage
    Réponses: 7
    Dernier message: 12/11/2003, 12h18

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