Comment convertir une chaîne de caractères (slugify) avec CodeIgniter ?

Introduction

Cette page explique comment convertir une chaîne de caractère en URL sous CodeIgniter. En anglais, la chaine de caractère résultante s'appelle un "slug". "Slugify" est le verbe associé au processus de convertion. Par exemple : le blog de Lulu deviendra après transformation le-blog-de-lulu.

Solution native

CodeIgniter est fourni avec des classes d'assitance (helpers) qui peuvent être utilisée pour slugifier des chaînes de caractères.

La fonction suivante permet de convertir une chaîne de caractères en slug:

$this->load->helper('text');
$this->load->helper('url');
$slug = url_title(convert_accented_characters($string), 'dash', true);

Toutefois, ces fonctions ne supportent pas les translittération pour toutes les langues, en particulier pour le français. À titre d'exemple, l'apostrophe est supprimé de la chaîne initiale au lie d'être remplacé par un séparateur.

Surcharger url_helper

La meilleure option pour la conversion et l'ajout de futurs caractères non supportés est "d'étendre" la classe url_helper. Créer un nouveau fichier nommé MY_url_helper.php dans le dossier application/helpers/.

Voici le contenu du fichier :

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

// Check if the function does not exists
if ( ! function_exists('slugify'))
{
    // Slugify a string
    function slugify($string)
    {
        // Get an instance of $this
        $CI =& get_instance(); 

        $CI->load->helper('text');
        $CI->load->helper('url');

        // Replace unsupported characters (add your owns if necessary)
        $string = str_replace("'", '-', $string);
        $string = str_replace(".", '-', $string);
        $string = str_replace("²", '2', $string);

        // Slugify and return the string
        return url_title(convert_accented_characters($string), 'dash', true);
    }
}

Utilisation

Le code suivant permet de convertir une chaîne de caractères en slug:

$this->load->helper('url_helper');
$slug = slugify ($string);

Voir aussi


Dernière mise à jour : 05/11/2020