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 :

wordwrap() donne un résultat 'aléatoire'


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de sami_c
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mai 2002
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 770
    Par défaut wordwrap() donne un résultat 'aléatoire'
    Bonjour,
    J'ai un long texte à intégrer dans une image, j'utilise donc wordwrap pour découpe le texte. Le problème c'est que parfois certains mots sont renvoyés à la ligne alors qu'il y a encore de l'espace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wordwrap($texte2, 55, "\n"

    Ligne 5 : 'investissement' pouvait bien être dans la ligne précédente !


    Ligne 3 : 'forte'
    Ligne 5 : 'souhaite'

    si j'ai bien compris le fonctionnement de la fonction wordwrap(), elle fait un compromis entre la valeur max (ici 55) et le dernier mot, mais moi je voudrais que les mots qui ont assez de place ne descendent pas, j'ai beau cherché une fonction pareille mais j'ai rien trouvé quelqu'un a une idée ?
    merci
    Images attachées Images attachées   

  2. #2
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    Bonjour,

    dixit la doc officielle, l'option "CUT" de la fonction sert à ça, et a priori le fait bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $test="sdmfkjsmdfkjsdfqkmsl sdldkf lmksqdjf mlksdjfmksd smlkfj sddk skdfk lksdf lkdfk slfk sdmkfsmdfkms kldk sldmfjkmsdjmf";
    ?>
    <div style="width:150px;border:1px solid #CCC">
    <?php 
    $texte= wordwrap($test, 55, "\n", false);
    echo print_r($texte, true);
    ?>
    </div>

  3. #3
    Membre éclairé Avatar de sami_c
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mai 2002
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 770
    Par défaut
    mais avec cette solution certains mot seront coupés : on aura une patrie dans une ligne et le reste dans la ligne suivante !! je ne veux pas que les mots soit coupé !!

  4. #4
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    Doc officielle PHP :
    cut

    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.
    dans mon exemple, il vaut false...


  5. #5
    Membre éclairé Avatar de sami_c
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mai 2002
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 770
    Par défaut
    le paramètre CUT est par défaut à FALSE, et donc ça ne résout pas le problème !

  6. #6
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    Pour moi, wordwrap fait bien son boulot, regarde le code ci-dessous, peut-être une solution de ce côté ?...

    a priori, dans cet exemple, cela marche à l'envers (l'image est taillé pour la longueur de la chaine)

    source : doc officielle PHP

    Code : 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
    function sendimagetext($text) {
      // Set font size
      $font_size = 4;
     
      $ts=explode("\n",$text);
      $width=0;
      foreach ($ts as $k=>$string) { //compute width
        $width=max($width,strlen($string));
      }
     
      // Create image width dependant on width of the string
      $width  = imagefontwidth($font_size)*$width;
      // Set height to that of the font
      $height = imagefontheight($font_size)*count($ts);
      $el=imagefontheight($font_size);
      $em=imagefontwidth($font_size);
      // Create the image pallette
      $img = imagecreatetruecolor($width,$height);
      // Dark red background
      $bg = imagecolorallocate($img, 0xAA, 0x00, 0x00);
      imagefilledrectangle($img, 0, 0,$width ,$height , $bg);
      // White font color
      $color = imagecolorallocate($img, 255, 255, 255);
     
      foreach ($ts as $k=>$string) {
        // Length of the string
        $len = strlen($string);
        // Y-coordinate of character, X changes, Y is static
        $ypos = 0;
        // Loop through the string
        for($i=0;$i<$len;$i++){
          // Position of the character horizontally
          $xpos = $i * $em;
          $ypos = $k * $el;
          // Draw character
          imagechar($img, $font_size, $xpos, $ypos, $string, $color);
          // Remove character from string
          $string = substr($string, 1);     
        }
      }
      // Return the image
      header("Content-Type: image/png");
      imagepng($img);
      // Remove image
      imagedestroy($img);
    }
    ?>

Discussions similaires

  1. [MySQL] Résultat aléatoire à partir d'un base de données
    Par Angelik dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/06/2008, 15h46
  2. Réponses: 6
    Dernier message: 18/08/2006, 10h24
  3. loadvars : résultat aléatoire
    Par Pallas4 dans le forum Flash
    Réponses: 2
    Dernier message: 14/08/2006, 12h36
  4. crc32() donne un résultat négatif
    Par Hal2001 dans le forum Langage
    Réponses: 1
    Dernier message: 19/04/2006, 18h11

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