Bug Posté 1 Mars 2005 Posté 1 Mars 2005 Bonjour Pour couper un texte, j'utilise la fonction suivante: <?php $newarticle = substr($row_news['news_texte'], 0, 150); echo $newarticle ?> ... Le problème est que si je tombe au milieu d'un caractère codé genre é , je vous laisse imaginer le résultat de l'affichage. J'ai donc cherché la solution pour supprimer les caractères qui suivent le premier blanc rencontré à partir de la fin, mais je ne trouve pas la solution sur le peu de sites consacrés au PHP que je connais ... Quelqu'un aurait une idée ?
xpatval Posté 1 Mars 2005 Posté 1 Mars 2005 explode ou implode pourrait t'aider, je pense. A tester... xpatval
xpatval Posté 1 Mars 2005 Posté 1 Mars 2005 En fait, plutôt qu'explode(), nous allons utiliser strtok() news_texte = "blabla blibli bloblo...";$delimiteur = strtok($news_texte," ");$cpt = 0;for ($cpt = 0; $cpt < 30; $cpt++){ echo $delimiteur ." "; $delimiteur = strtok(" ");} Ici, c'est le nombre de blancs entre deux mots, géré par $cpt, qui est à régler en fonction du nombre de mots que tu souhaites récupérer. xpatval
Bug Posté 1 Mars 2005 Auteur Posté 1 Mars 2005 Ici, c'est le nombre de blancs entre deux mots, géré par $cpt, qui est à régler en fonction du nombre de mots que tu souhaites récupérer Donc, dans ce cas, si j'ai bien compris, je crée un tableau avec un mot par sous-chaine, puis je reconstitue ma chaîne jusqu'à la valeur maxi de $cpt (30 dans ton exemple). J'ai juste ? Comme le nombre de mots est très variable dans ma chaîne de 150 caractères, je dois pouvoir compter le nombre de blancs avec une fonction genre substr_count pour alimenter une variable et remplacer le '< 30' qui est arbitraire par '< $variable' non ?
xpatval Posté 1 Mars 2005 Posté 1 Mars 2005 Effectivement, je pense que tu peux procéder ainsi. Dans mon exemple, $cpt est le nbre de blanc. Si tu peux le renseigner en fonction de tes désidératas, tu peux reconstituer la chaîne avec le nombre de blancs voulu, dans un nombre de caractères voulu. je pense qu'un truc comme: $cpt = substr_count(substr($row_news['news_texte'], 0, 150)," "); doit te donner le nombre de blancs de ta sous-chaîne de 150 caractères. Tu me diras si cela fonctionne. xpatval
Bug Posté 1 Mars 2005 Auteur Posté 1 Mars 2005 je teste ça demain et je te tiens au courant bonne nuit
Dan Posté 1 Mars 2005 Posté 1 Mars 2005 Voici ce que j'utilise sur lisons.info pour les résumé de biographies (marge droite sur fiche des livres) function shorten($text,$maxTextLenght) { if(strlen($text) > $maxTextLenght ) { $text = substr(trim($text),0,$maxTextLenght); $text = substr($text,0,strlen($text)-strpos(strrev($text)," ")); } $text = ereg_replace("\r\n"," ",$text); return $text." ..."; } A adapter selon vos besoins
Bug Posté 2 Mars 2005 Auteur Posté 2 Mars 2005 (modifié) Salut J'ai trouvé une autre solution: // recuperation des 150 premiers caractères<?php $newart = substr($row_news['news_texte'], 0, 150);// strrpos recherche la position du premier caractère blanc à partir de la fin$pos = strrpos($newart, " ");// je redécoupe ma chaîne avec comme nombre de caractères la variable alimentée par strrpos$newarticle = substr($newart, 0, $pos);//j'affiche ma nouvelle chaîneecho $newarticle; ?> ... Ca fonctionne très bien Merci à Dan et xpatval pour leurs solutions. Si vous avez des arguments pour montrer que votre solution est meilleure, n'hésitez pas <edit>le résultat est visible ici: h..p://www.desmobug.net/index1.php (la partie Compétition moto - Les dernières nouvelles)</edit> Modifié 2 Mars 2005 par Bug
vanquish Posté 6 Mars 2005 Posté 6 Mars 2005 (modifié) Bonjour, Pourquoi se casser le crâne alors qu'il y a déjà une fonction pour wordwrap() Exemple : dans mes pages je fait ça : wordwrap(stripslashes($titre),40,"<br />",1) Et ça marche très bien Voir exemple ici : Omelette aux courgettes et aux herbes de provence (le titre de la recette en H1) Modifié 6 Mars 2005 par vanquish
Bug Posté 4 Avril 2005 Auteur Posté 4 Avril 2005 Salut, et désolé pour la réponse tardive, je viens juste de tomber sur ton post C'est vrai que c'est simple quand on a l'exemple, mais je ne me souviens même pas d'avoir vu cette instruction sur mes manuels. Par contre, en la connaissant, on la trouve facilement ... Personne ne connaitrait un bon manuel php avec les fonctions classées par thème ? Merci Vanquish pour ta solution, je m'y colle demain.
Anonymus Posté 4 Avril 2005 Posté 4 Avril 2005 En fait, dans la doc officielle, ils sont classés par thème. Tu as les variables, les tableaux, etc.. mais tu as aussi les lecture/ecriture dans les fichiers, les fonctions apache, les pdf, etc.. bref, c'est classé par thème. En fait, bien souvent, on se réfère à un manuel que l'on pense complet, parce que bien épai, alors que le plus épai reste la doc officielle, qu'il est bon de parcourir "tel un surfeur sur le net", et se laisser promener au fil des pages, pour justement trouver ces fonctions peu utilisées mais fort utiles, que l'on saura retrouver par la suite. Nico.
Bug Posté 5 Avril 2005 Auteur Posté 5 Avril 2005 parcourir "tel un surfeur sur le net", et se laisser promener au fil des pages Dit comme ça, ça pourrait le faire, mais j'ai peur d'avoir des problèmes de digestion à force de lire des descriptions de fonctions qui sont parfois un peu lourdes ... Je vais quand même essayer, ça vaut surement le coup.
Dan Posté 5 Avril 2005 Posté 5 Avril 2005 Salut Vanquish, La fonction wordwrap ne coupe pas un texte mais garde l'entièreté de celui-ci en rajoutant des sauts de ligne à la longueur voulue. Ton exemple sur cuisinetoo met en page un texte pour forcer les sauts de ligne, mais ne raccourcit pas le texte initial. Dan
Bug Posté 5 Avril 2005 Auteur Posté 5 Avril 2005 Si je prends le O'Reilly de poche intégré à Dreamweaver (tiens, lui aussi est classé par thème, j'ai pas dû l'ouvrir souvent celui ci ... ) il est écrit: wordwrapstring wordwrap (string str[, int width[, string break [, int cut]]]) Enveloppe le tampon avec le nombre de caractères choisi à l'aide d'un caractère de rupture de chaîne L'exemple typique d'explication que je trouve indigeste Sans rire, il n'y a pas de façon plus simple de décrire cette fonction ? C'est traduit de l'anglais par le traducteur automatique de Ya..o ? Pour le fun, j'ai traduit la description en anglais sur Y... puis retraduit en français après, et le résultat est le suivant: Enveloppez la prise avec le nombre de caractères choisis en utilisantun caractère de la rupture à chaînes
Anonymus Posté 5 Avril 2005 Posté 5 Avril 2005 Comme tu dis, ca doit sortir d'un traducteur automatique. Il faut donc, puisque c'est de l'anglais, traduire de droite à gauche : Enveloppe le tampon avec le nombre de caractères choisi à l'aide d'un caractère de rupture de chaîne un caractère de rupture de chaine = <br> le nombre de caractères choisi = à combien de lettres tu veux que ca coupe, enveloppe le tampon = Souvent, la sortie générée est appelée 'tampon'. (en anglais : buffer) Donc, ca prend ce qui va être envoyé au navigateur, ca le décompose en xx caractères, et ca y inclue un caractère de rupture de chaine. En "doc-fr", ca donne : string wordwrap ( string str [, int width [, string break [, boolean cut]]]) wordwrap() retourne la chaîne str, après avoir inséré break tous les width caractères. Par défaut, wordwrap() va automatiquement insérer une nouvelle ligne tous les 75 caractères, si width et break ne sont pas fournis. Si le paramètre cut est mis à 1, la chaîne sera toujours césurée à la taille width. Si vous avez un mot qui est plus long que la taille de césure, il sera coupé en morceaux. Beaucoup plus simple, non ?
Bug Posté 6 Avril 2005 Auteur Posté 6 Avril 2005 Merci Anonymus, c'est beaucoup plus clair comme ça. C'est vrai que dans le domaines de la programmation cobol/mainframe, on a rarement l'occasion de parler de buffer ... Encore merci pour la traduction.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant