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 :

Utilisation sprintf et &nbsp


Sujet :

Langage PHP

  1. #1
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut Utilisation sprintf et &nbsp
    Bonjour,

    A tous, au jour d'aujourdh'ui, j'utilise toujours la même méthode pour formater avec des espaces des lignes html.

    Mon code actuel est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $conversion = array(" "=>" ");
    $chainef = sprintf( "%15s", $val['nom_parcelle'] );
    $chaine = strtr( $chainef, $conversion );
    Ce code marche mais j'aimerais le mettre sur une ligne avec sprintf car je viens de voir que nous pouvons utiliser des caractères de substitution autre que le 0 et l'espace. D'ou mon idée de remplir avec l'espace insécable &nbsp.

    J'ai essayé différentes solutions comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $chainef = sprintf( "%'(&nbsp)15s", $val['nom_parcelle'] );
    ou sans parenthéses mais rien

    Quelqu'un connait il la solution avec le sprintf ou alors une autre solution

    Merci.
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Il est bien question d'un caractère et non d'une chaîne. Le format, sinon, n'est plus valide donc n'est plus reconnu.

  3. #3
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Oui, d'après la description du sprintf, il est bien question d'un caractère mais j'osais espérer une solution c tout. Ou alors une solution autre qu'avec le sprintf !!!

    Merci.
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Il existe bien une personne qui a formater des champs textes pour coller à une longueur demandée avec des espaces html ...
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Il faut représenter l'espace insécable tel qu'il est \xA0 en ISO-8859-1 (valeur hexadécimale).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    header('Content-type: text/html; charset=iso-8859-1');
    $c = "\xA0";
    var_dump(
        'b'. sprintf("%'{$c}2000s", 'a')
    );
    Sinon, strtr après sprintf en est une. Je manque peut être d'idées mais c'est plus court que de chercher à combiner des fonctions parmi celles-ci : (mb_)strlen, str_pad, str_repeat, preg_replace(_callback).

    Le contexte est éventuellement à prendre en compte (sprintf n'est pas limité aux seules chaînes et suivant s'il y a déjà des espaces à conserver).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function lpad($string, $minlength) {
        $missing = $minlength - /*mb_*/strlen($string);
        if ($missing > 0) {
            $string = str_repeat(' ', $missing) . $string;
        }
        return $string;
    }
     
    function lpad($string, $minlength) {
        return str_replace(' ', ' ', str_pad($string, $minlength, ' ', STR_PAD_LEFT));
    }
    Qu'appelez-vous "champ texte" ? Pour quel(s) besoin(s) ?

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Merci de la réponse ...

    Malheureusement je suis en utf8 et c là que m.... j'arrive pas à passer ce caractère. Reste tjs le strstr après le sprintf ...

    Sinon pour info:
    Qu'appelez-vous "champ texte" ? Pour quel(s) besoin(s) ?
    Voici mon problème: Je suis sur Postgres et je cherche à faire un affichage html d'une table de la base dans un tableau (un truc normalement simple). Les champs à afficher sont de longueur 25 par ex et la longueur reste fixe et rempli d'espaces pour complèter à 25. OR à l'affichage, les espaces sont tronqués et du coup mon affichage est nul.
    Avant je travaillais sur Java/Mysql et j'avais pas ce problème car les espaces à l'affichage restaient des espaces.
    En postgres je suis en UTF8, de même sur mon IE, alors je tourne en rond et j'ai mieux comme solution que le strstr du sprintf

    Pour les fonctions lpad, oui pourquoi pas aussi MAIS j'aurais vraiment aimé convertir ce &nbsp.
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    En effet, *printf ne gèrent pas les caractères multi-octets et étant donné que l'espace insécable est codé sur deux octets en UTF-8, le format n'est plus reconnu non plus. A moins d'effectuer (et de le pouvoir) un décodage (UTF-8 => ISO-8859-1) avant puis le réencodage (ISO-8859-1 => UTF-8), c'est malheureusement impossible.

    Ou d'éventuellement trouver une solution qui convient ailleurs : SGBD, CSS (propriété white-space).

  8. #8
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Ok, merci de l'aide,

    Je vais encore un peu chercher et sinon me rabattre sur le strstr

    Bonne fin de journée.
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

Discussions similaires

  1. comment utiliser sprintf
    Par boboss123 dans le forum C
    Réponses: 9
    Dernier message: 18/12/2009, 10h31
  2. utilisation de sprintf
    Par greg80 dans le forum C++
    Réponses: 2
    Dernier message: 01/05/2009, 14h46
  3. Utilisation de la fonction sprintf
    Par Fred677 dans le forum C
    Réponses: 3
    Dernier message: 01/03/2008, 11h21
  4. Réponses: 12
    Dernier message: 26/07/2006, 12h08
  5. De l'utilisation de sprintf()...
    Par @drien dans le forum C
    Réponses: 9
    Dernier message: 31/12/2005, 12h54

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