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 :

Fonction "Tronquage" avec caractères spéciaux


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Par défaut Fonction "Tronquage" avec caractères spéciaux
    Bonjour à tous,

    Je souhaite faire une fonction pour tronquer des textes.
    J'ai créé une fonction toute simple, mais je me suis aperçu que mes textes étant encodé, lorsqu'elle tronquait, il pouvait arriver que cela tronque au milieu d'un code html.
    Par exemple "hôtel", pourrait être tronqué en "h&oc".
    J'ai voulu donc ajouter un code, en convertissant avant de tronquer, et en reconvertissant ensuite pour l'affichage, mais je ne m'en sors pas.
    Si le dernier caractères restant après tronquage est un caractère spécial, lorsque je ré-encode, alors il me renvoie une chaine vide !

    Voilà mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function truncate($text, $length)
    {
    	$text=html_entity_decode($text,ENT_QUOTES,"UTF-8");
    	$trunc = (strlen($text)>$length)?true:false; //si $trunc = taille du texte > $length (s'il y a au moins $length caractères), $trunc = true sinon $trunc =false
    	if($trunc) //si $trunc = true
    	{
    		$text=substr($text, 0, $length);
    		return htmlentities($text,ENT_QUOTES,"UTF-8").'...';
    	}
    	else
    	{				
    		return htmlentities($text,ENT_QUOTES,"UTF-8");
    	}
    }
    Merci de votre aide.

    P.

  2. #2
    Membre expérimenté

    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
    Par défaut
    Ni strlen ni substr ne sont appropriées pour de l'UTF-8. Pour ça, il faut aller chercher leurs équivalents dans mbstring (mb_strlen et mb_substr).

    strlen, ici, renvoie le nombre d'unités de code et non de caractères, ce qui est totalement différent. Et substr, considère également les unités de code, donc vous pouvez effectivement couper en plein milieu de la représentation d'un caractère.

    PS : il n'aurait fallu faire un htmlspecialchars qu'à la toute fin [pour l'affichage] parce que là ça complique inutilement la tâche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mb_internal_encoding('UTF-8');
     
    function truncate($text, $length) {
        if (mb_strlen($text) > $length) {
            $text = mb_substr($text, 0, $length) . '...';
        }
        return $text;
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Par défaut
    Trop fort !

    Je ne connaissais pas du tout ce type de fonction.

    Merci beaucoup !

    Au passage, je cherche la même chose pour le faire avec une fonction javascript pour l'utiliser dans l'API Google Maps, est-ce que ça existe ?

    Bonne journée.

    P.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    on s'était amusé à ca : Réparer du code HTML pour en arriver à ces fonctions.
    (en évitant de couper des mots)

    Ca m'a servi ici : Système de Gestion-Affichage de Nouvelles

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Par défaut
    Ah oui, comme tu dis , vous vous étiez amusé !
    Merci. Je vais regarder ça.

    Bonne soirée.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Par défaut
    Bonjour à tous,

    Je suis un peu perplexe.
    J'avais lancé ce sujet il y a quelques semaines, et la réponse apportée (sur la partie troncage en PHP) avait parfaitement fonctionnée.
    Je m'aperçois aujourd'hui que cela ne fonctionne plus !

    J'ai regardé et la fonction est toujours présente et inchangée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mb_internal_encoding('UTF-8');
    	function truncate($text, $length) {
    		if (mb_strlen($text) > $length) {
    			$text = mb_substr($text, 0, $length) . '...';
    		}
    		return $text;
    	}
    Il s'agit de titres extraits de ma table mysql.
    Tous les champs de ma table sont déclarés en utf8.

    Qu'est-ce qui pourrait influer sur le fait que la fonction ne marche plus ?

    Merci de votre aide ?

Discussions similaires

  1. recupérer GET avec caractères spéciaux
    Par masseur dans le forum Langage
    Réponses: 11
    Dernier message: 03/01/2006, 11h37
  2. [RegEx] chaîne de caractères avec caractères spéciaux
    Par Kerod dans le forum Langage
    Réponses: 9
    Dernier message: 25/12/2005, 01h40
  3. Réponses: 3
    Dernier message: 11/10/2004, 17h26

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