begin process at 2012 02 15 22:31:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > ÉVITER LA DÉFORMATION D'UN TABLEAU HTML EN DÉCOUPANT UNE CHAINE

ÉVITER LA DÉFORMATION D'UN TABLEAU HTML EN DÉCOUPANT UNE CHAINE


 Information sur la source

Note :
5 / 10 - par 1 personne
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Chaîne de caratère Niveau :Initié Date de création :09/08/2003 Date de mise à jour :09/08/2003 17:13:31 Vu :3 169

Auteur : eax

Ecrire un message privé
Site perso
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

voici un code pour éviter que les longs mots ne viennent foutre le bordel dans le design d'un site (je pense aux tableaux en particulier)
ben oui, y'a toujours un gros lourd qui va se mettre un pseudo très long ou dans un forum un message avec des mots de 30 caractères du genre

waaaaaaaaaaaaaaaaaaaaaaazzzzzzzzzzzzaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaa

le résultat est pas très joli (enfin c'est surtout le webmaster qui va faire la gueule lol)

ce code est une fonction qu'on appelle par:

echo format_chaine($chaine,$longueur);

$chaine: la chaine string à traiter
$longueur: longueur maximale d'une ligne

voici un exemple:

$chaine="coucou blablablablablablablablabla il fait beau, les oiseaux chantent lol";
$longueur=20;

la fonction va renvoyer ceci:

coucou blablablablab
lablablablabla
il fait beau, les
oiseaux chantent lol

bon c pas très jolie mais bon bref...  

Source

  • <?
  • function format_chaine($chaine,$longueur){
  • $chaine=trim($chaine); //vire les espaces en début et fin de chaine
  • $chaine=strtr($chaine,array_flip(get_html_translation_table(HTML_ENTITIES))); //vire les cars html qui vont perturber le comptage des lettres
  • $mots=explode(' ',$chaine); //sépare tous les mots
  • $nb_mots=count($mots); //compte le nb de mots
  • $pos=0;
  • for($i=0;$i<=$nb_mots-1;$i++){
  • if(strlen($mots[$i])>$longueur){ //si le mot rentre pas sur une seule ligne
  • $debut=0;
  • if($longueur-strlen($ligne[$pos])>=$longueur/3){ //si il reste plus d'un tiers de la ligne dispo
  • $debut=$longueur-strlen($ligne[$pos]);
  • $ligne[$pos].=substr($mots[$i],0,$debut); // on place sur cette ligne le début du mot
  • }
  • $nb_lignes=ceil((strlen($mots[$i])-$debut)/($longueur-1)); //nb de lignes nécessaires pr ce mot
  • for($j=0;$j<=$nb_lignes;$j++){
  • $ligne[$pos].=substr($mots[$i],$debut,$longueur); //on découpe ce mot sur le nb de lignes nécessaires
  • $debut+=$longueur;
  • }
  • }else{ //si le mot rentre sur une ligne
  • if(strlen($ligne[$pos])+strlen($mots[$i])<=$longueur){ //y'a encore de la place sur cette ligne?
  • $ligne[$pos].=$mots[$i].' '; //oui: on y ajoute le mot
  • }else{ //non: on ajoute le mot sur une autre ligne
  • $pos++;
  • $ligne[$pos].=$mots[$i].' ';
  • }
  • }
  • }
  • for($i=0;$i<=count($ligne)-1;$i++){ //on remet les caractères html
  • $ligne[$i]=htmlentities($ligne[$i]);
  • }
  • $resultat=implode("<br>\n",$ligne); //on crée une chaine toute propre
  • return $resultat;
  • }
  • ?>
<?
function format_chaine($chaine,$longueur){
    $chaine=trim($chaine); //vire les espaces en début et fin de chaine
    $chaine=strtr($chaine,array_flip(get_html_translation_table(HTML_ENTITIES))); //vire les cars html qui vont perturber le comptage des lettres
    $mots=explode(' ',$chaine); //sépare tous les mots
    $nb_mots=count($mots); //compte le nb de mots
    $pos=0;
    for($i=0;$i<=$nb_mots-1;$i++){
        if(strlen($mots[$i])>$longueur){ //si le mot rentre pas sur une seule ligne
            $debut=0;
            if($longueur-strlen($ligne[$pos])>=$longueur/3){ //si il reste plus d'un tiers de la ligne dispo
                $debut=$longueur-strlen($ligne[$pos]);
                $ligne[$pos].=substr($mots[$i],0,$debut); // on place sur cette ligne le début du mot
            }
            $nb_lignes=ceil((strlen($mots[$i])-$debut)/($longueur-1)); //nb de lignes nécessaires pr ce mot
            for($j=0;$j<=$nb_lignes;$j++){
                $ligne[$pos].=substr($mots[$i],$debut,$longueur); //on découpe ce mot sur le nb de lignes nécessaires
                $debut+=$longueur;
            }
        }else{ //si le mot rentre sur une ligne
            if(strlen($ligne[$pos])+strlen($mots[$i])<=$longueur){ //y'a encore de la place sur cette ligne?
                $ligne[$pos].=$mots[$i].' '; //oui: on y ajoute le mot
            }else{ //non: on ajoute le mot sur une autre ligne
                $pos++;
                $ligne[$pos].=$mots[$i].' ';
            }
        }
    }
    for($i=0;$i<=count($ligne)-1;$i++){ //on remet les caractères html
        $ligne[$i]=htmlentities($ligne[$i]);
    }
    $resultat=implode("<br>\n",$ligne); //on crée une chaine toute propre
    return $resultat;
}
?>   

 Conclusion

note: avant de traiter la chaine, le texte est débarrassé des caractères html pour éviter de compter 7 caractères pour é au lieu de 1 seul (&eacute;)

je me suis inspire de qq messages sur le forum pr faire cette source, mais elle me parait bien longue pour ce qu'elle fait, il doit y avoir un moyen de faire + siimple je pense  


 Sources du même auteur

AFFICHAGE DE RÉSULTATS MYSQL SUR PLUSIEURS PAGES
QUI EST ONLINE?
CALCULER LA TAILLE D'UN DOSSIER
Source avec Zip CODES POSTAUX LOL
Source avec Zip ÉPHÉMÉRIDE

 Sources de la même categorie

ADRESSE ABSOLUE DE LA PAGE EN COURS, AVEC VARIABLES $_GET par Dariumis
Source avec Zip CLASSE D'OBJET DE RECHERCHE DE MOTS DANS DES TABLEAUX ET/OU ... par 8Tnerolf8
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE par tefa24600
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip Source avec une capture CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGE par Salva9473

Commentaires et avis

Commentaire de stailer le 09/08/2003 17:42:07

Pourquoi pas... Du moins le code source est intéressant.
Sinon au niveau utilité y a beaucoup plus simple :
Sur le formulaire ou l'utilisateur rentre son nom ou son email, il suffit de définir le nombre de caractères maximal à 20 par exemple dans le champ de saisi (propriété maxlength en html).

Commentaire de Tortuegeniale le 09/08/2003 17:46:30

ouah super simple, ensuite suffit de passer le champ par l'url ou par un programme  spécial et ta super sécurité marche pas, de plus tu as pas compris la source, ça sert a pas déformer un tableau, et la max lenght ne sert a rien ici :|

Commentaire de stailer le 09/08/2003 18:39:18

Je ne parlai pas de l'intérêt de la source sur les tableaux mais sur la protection d'un nombre maximal de caractères.

Dans ces cas la il suffit de faire sur la page de réception en php, avant l'insertion, que si le nombre de caractère de la variable "nom" est plus grand que 30 par exemple, ben annuler l'insertion.
Ceci évite les gros lourds comme le dis Eax et les empêche de pourrir la base.
Enfin bon... ca dépend si on veut des lourds ou pas sur son site :)

Commentaire de Clem le 09/08/2003 19:01:54

en tout cas, je préfère utiliser les preg, qui sont beaucoup plus rapide que des boucles caractères par caractères :
function coupemot($m, $l) {
for ($i=0; $i&lt;20; $i+=$l) $r.=substr($m, $i, $l)." ";
return $r;
}
function format_chaine($c,$l) {
return preg_replace("/([^ ]{" . $l . ",})/Ue", "coupemot('\1', $l)", $c);
}

Commentaire de Tortuegeniale le 09/08/2003 19:50:35

:| c pas le nombre maxi de caractere qu'il limite avec sa source, c le nombre de caractere par ligne

Eax&gt; j'ai fais une source je la poste la, parceque ta source comporte des erreurs (par exemple ça respect pas la mise ne forme)

Commentaire de matrey le 09/08/2003 22:33:44

wordwrap() existe dans PHP.... (coupe par défaut à 75 caractères)

Commentaire de eax le 09/08/2003 23:42:29

wordwrap() ah oui, je savais pas
g meme pas cherché lol :)

Commentaire de stailer le 10/08/2003 01:14:25

C'est clair. je ne me vois pas passer tous les messages d'un forum à la moulinette de cette énorme fonction.
Mais ceci dit le code est intéressant quand même.

Commentaire de Tortuegeniale le 10/08/2003 01:25:47

eax&gt;
va voir ça quand je parle du screen lol http://screen.kame-house.org/image.jpg (en haut mon script, en bas le tien)

donc ton script il rend pas la mise en forme. par exemple :
"salut
eax
ça va ?"

il va écrire "salut eax ça va ?" (Regarde sur le screen la ou c écrit "Pour Renaud et Florent" : dans mon script y a retour a la ligne et pas dans le tien)
Manque juste un nl2br() : return nl2br($resultat);

Ensuite sur le screen c une news que j'avais de mon site et j'ai ajouté plein de fois "a" (plus de 200 fois je crois) et ton script le coupe pas.

Sinon tu attaques différement la chose toi, tu t'occupes de la taille de la ligne, moi je m'occupes de la tailles des mots, c 2 approches différentes mais ça marchera quand meme :)

Commentaire de eax le 10/08/2003 08:24:54

ah ok ben je te remercie
j'y avais pas pensé cette mise en page
mais y'a un truc que j'aurais aimé faire c spécifier une longueur max en pixels et non en nb de caractères c la que ça devient + intéressant mais je sais pas comment faire lol

Commentaire de mastervanou le 11/09/2003 11:24:48

bah moi j'utilise une fonction javascript pour vérifier le formulaire

if (document.post.message.value.length !="")
{
    mot=document.post.message.value.substring(" "," ");
   espace = document.post.message.value.indexOf(" ");
   mot2 = document.post.message.value.substring(espace+1," ");
   if ((mot2.length &gt; 17 ) || (mot.length &gt; 17 )) {alert("Y'a un mot trop long dans ce commentaire");
return false;}
}

et dans la page qui recoit les données je met ca:

$HTTP_POST_VARS[message]= str_replace("
","&lt;br&gt;",($HTTP_POST_VARS[message]));

Commentaire de Tortuegeniale le 11/09/2003 14:27:16

le javascript c pas sur, on passe trés facilement au travers, par contre le coté serveur on peut pas passer au traver

Commentaire de eax le 11/09/2003 15:40:07

à moins d'aller sur place lol

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales