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 :

Transformation d'une chaîne de caractères


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de Scalp4
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 106
    Points : 62
    Points
    62
    Par défaut Transformation d'une chaîne de caractères
    Bonjour,

    Voilà, j'ai une fonction qui permet de créer un slug d'une chaîne de caractère.

    Voici la fonction :

    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
    <?php
    static public function slugify($text)
    	{
    		// replace non letter or digits by -
    		$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
    		// trim
    		$text = trim($text, '-');
    		// transliterate
    		if (function_exists('iconv'))
    		{
    			//$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
    			$text = preg_replace("/&(.)(acute|cedil|circ|ring|tilde|uml);/", "$1", $text);
    		}
    		// lowercase
    		$text = strtolower($text);
    		// remove unwanted characters
    		$text = preg_replace('~[^-\w]+~', '', $text);
     
    		if (empty($text)) {
    			return 'n-a';
    		}
     
    		return $text;
    	}
    ?>
    En gros ça devrait me transformer une chaîne du type : "à dos d'éléphants"
    par : "a_dos_d_elephants".

    Mais ça ne marche pas car il n'arrive effectuer la fonction iconv correctement, il me remplace les caractère accentué par un point d'interrogation qui est ensuite supprimé par le "preg_replace"...

    J'ai donc fais ce test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php 
    	$text = 'éàè';
    	$new_text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
    	echo $text . ' => ' . $new_text;
     
    	echo '<pre>';
    	var_dump(iconv_get_encoding('all'));
    	echo '</pre>';
    ?>

    Qui retourne :

    éàè => ???


    array(3) {
    ["input_encoding"]=>
    string(5) "utf-8"
    ["output_encoding"]=>
    string(5) "utf-8"
    ["internal_encoding"]=>
    string(5) "utf-8"
    }
    Tout mes fichiers php sont encodé en UTF-8.

    Je ne vois vraiment pas d'où peut provenir l'erreur, si vous avez une idée, merci d'avance.

    Scalp

  2. #2
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    pourquoi tu utilises "iconv" si toutes tes chaînes de caractères sont déjà en UTF-8 ?
    GNAP !

  3. #3
    Membre du Club Avatar de Scalp4
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 106
    Points : 62
    Points
    62
    Par défaut
    Ben parce que en UTF-8, il y a quand même des accents. Ce que je cherche, c'est une fonction qui permet de me remplacer toutes les lettres d'une chaine avec des accents, par la même chaine, mais sans accent... Je crois que c'est la fonction iconv qui fait ça mais si quelqu'un à une idée (autre que str_replace evidement... :p).



    J'ai peut être mit ce post au mauvais endroit, la section Php - Fonctions semble être plus approprié je pense.

  4. #4
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    Citation Envoyé par Scalp4 Voir le message
    Ben parce que en UTF-8, il y a quand même des accents. Ce que je cherche, c'est une fonction qui permet de me remplacer toutes les lettres d'une chaine avec des accents, par la même chaine, mais sans accent... Je crois que c'est la fonction iconv qui fait ça mais si quelqu'un à une idée (autre que str_replace evidement... :p).
    "iconv" permet seulement de passe d'un encodage à un autre
    si tu as besoin de modifier certaines lettre tu devras obligatoirement passer par des fonctions de remplacement comme "str_replace" par exemple
    GNAP !

  5. #5
    Membre du Club Avatar de Scalp4
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 106
    Points : 62
    Points
    62
    Par défaut
    Oui je comprends ce que tu veux dire...

    En fait l'utilisation de "iconv" dans mon cas était plus une feinte qu'autre chose, je m'en étais pas forcement rendu compte.

    Existe t'il des fonctions toutes faites qui remplace directement tous les accents par des caractère sans accents, je vais essayer de me pencher la dessus, peut être du côté des RegExp.

    Merci de ta réponse.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 167
    Points : 186
    Points
    186
    Par défaut
    Trouver sur http://fr2.php.net/manual/fr/function.strtr.php

    Code php : 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
     
    <?php
     
    function normalize ($string) {
        $table = array(
            'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c',
            'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
            'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
            'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
            'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
            'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
            'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
            'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r',
        );
     
        return strtr($string, $table);
    }
     
    ?>

  7. #7
    Membre du Club Avatar de Scalp4
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 106
    Points : 62
    Points
    62
    Par défaut
    Merci beaucoup de ta réponse, c'est exactement ce que je cherchais !

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 167
    Points : 186
    Points
    186
    Par défaut
    A ton service

    Bon courage,
    Doki.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Visual I/O] Transformer une chaîne de caractères en un nom de variable
    Par GlaD69 dans le forum Autres IDE
    Réponses: 0
    Dernier message: 20/09/2012, 16h13
  2. Réponses: 3
    Dernier message: 09/02/2009, 17h46
  3. Réponses: 2
    Dernier message: 09/07/2008, 15h20
  4. Transformer une chaîne de caractères en lien hypertexte
    Par laurentdepibrac dans le forum VBA Access
    Réponses: 4
    Dernier message: 14/05/2008, 10h35
  5. Réponses: 3
    Dernier message: 08/02/2007, 11h55

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